Web Application 開 發 利 器 - WebSnap(五) (转)

Web Application 開 發 利 器 - WebSnap(五) (转)[@more@]

web Application 開 發 利 器 - WebSnap!

第 五 章 、 使 用 者 管 理 及 Sessions

 
 

 

  在 以 往 的 WebBroker+Inte.NETExpress 架 構 下 , 我 們 處 理 使 用 者 控 制 或 是 Session 管 理 都 很 麻 煩 ,WebSnap 加 強 了 這 部 份 的 能 力 , 利 用 WebSnap 來 處 理 使 用 者 或 是 Session 是 一 件 非 常 簡 單 的 事 情 , 接 下 來 我 們 就 為 我 們 的 程 式 加 上 這 些 功 能 。 

5-1 使 用 者 管 理 及 Sessions 實 作

 

要 在 WebSnap 程 式 中 使 用 Session 及 使 用 者 控 制 功 能 的 話 , 你 必 需 在 Application Module 中 加 入 三 個 元 件 :TEndUserSessionAdapter 、 TWebUserList 、 TSessionServices 。 TEndUserSessionAdapter 繼 承 至 TEndUserAdapter 並 加 入 了 Session 的 處 理 , 簡 單 的 說 她 只 是 把 使 用 者 的 資 料 存 入 Session 中 而 已 。 TWebUserList 則 負 責 儲 存 使 用 者 資 料 及 驗 證 的 工 作 , TSessionServices 是 整 個 WebSnap Application Session 控 管 的 核 心 元 件 , 當 網 頁 被 啟 動 時 TWebAppComponents 會 呼 叫 TSessionServices 來 產 生 一 個 Session 給 來 訪 者 , 接 著 再 將 這 個 Session 傳 給 WebContext 保 存 。 當 送 出 Response 時 將 SessionID 封 裝 成 Cookie 一 併 送 給 使 用 者 , 接 下 來 的 Request 就 會 以 Cookie 將 這 個 SessionID 送 回 給 我 們 的 程 式 。 有 了 這 個 SessionID 我 們 就 可 以 取 得 上 次 Session 中 的 資 料 了 , 這 些 動 作 會 受 到 Cookie 的 保 存 時 限 與 Session 的 保 存 時 限 所 影 響 , 當 Cookie 過 期 或 是 Session 的 時 限 到 期 亦 或 者 是 你 重 新 啟 動 了 程 式 後 Session 就 視 同 消 失 了 , 以 下 是 WebSnap 處 理 Session 的 流 程 :

 ( 圖 :6)

image005.jpg

 

當 你 放 好 這 些 元 件 後 , 你 還 要 設 定 TWebUserList 中 的 使 用 者 資 料 , 請 雙 按 她 的 UserItems 特 性 值 來 加 入 使 用 者 資 料 , 並 設 定 其 ID 與 密 碼 資 料 : 

W97.jpg

 

這 個 範 例 中 除 了 TEndUserSessionAdapter 會 將 使 用 者 資 料 存 放 在 Session 之 外 , 我 們 也 搭 個 便 車 使 用 一 下 Session 物 件 。 請 你 在 TEndUserSessionAdapter 中 加 入 一 個 AdapterField 名 稱 是 AdaptAge:

 W98.jpg

 

接 著 撰 寫 她 的 OnGetValue 事 件 , 加 入 以 下 的 程 式 碼 :

 

if not VarIsEmpty(Session.Values['Age']) then

 
 

Value:=Session.Values['Age']

 
 

else Value:=''; 

 
 

 

上 面 這 一 段 程 式 碼 是 用 來 確 定 Session 中 是 否 有 一 個 Age 的 值 , 有 的 話 就 存 入 Value 變 數 中 。 這 樣 我 們 就 可 以 在 Home Module 的 Script 中 加 入 以 下 的 程 式 來 顯 示 這 個 值 :

 

歡 迎 你 今 年 是 歲

定 義 語 系 ( 以 免 被 當 成 其 它 語 系 網 頁 )

 

 

 

然 後 我 們 要 新 增 一 個 Page Module 來 讓 使 用 者 登 入 系 統 , 請 選 擇 AdapterPageProducer 並 將 PageName 設 為 Login , 接 著 在 裡 面 放 入 一 個 TLoginFormAdapter 元 件 。 由 於 我 們 希 望 搭 Login 的 便 車 讓 使 用 者 填 入 額 外 的 資 料 , 因 此 除 了 TLoginFormAdapter 預 設 的 三 個 AdapterField 元 件 之 外 , 我 們 還 要 額 外 加 入 一 個 AdapterField 元 件 :

 

W99.jpg

 

完 成 後 我 們 還 得 撰 寫 AdaptAge 的 OnUpdateValue 事 件 , 將 輸 入 的 值 存 入 Session 中 :

 

procedure TLogin.AdaptAgeUpdateValue(Sender: Tobject; Value: Variant);

 
 

begin

 
 

Session.Values['Age']:=AdaptAge.ActionValue.Values[0];

 
 

end;

 
 

 

然 後 我 們 就 可 以 開 啟 Visual Page Designer 來 設 計 我 們 的 登 入 網 頁 了 , 整 個 畫 面 如 下 :

 

Q1.jpg

 

最 後 回 到 Application Module 將 TEndUserSessionAdapter 的 LoginPage 特 性 值 設 為 Login( 登 入 網 頁 的 PageName) 就 完 成 了 。

 那 我 們 要 如 何 將 一 個 網 頁 設 定 為 使 用 者 必 須 預 先 登 入 才 能 進 入 的 呢 ? 你 有 兩 種 選 擇 , 一 是 在 建 立 Page Module 時 將 Login Required 選 項 打 勾 , 另 一 個 是 手 動 去 改 變 Page Module 的 特 性 值 , 這 個 範 例 中 我 要 將 Edit 這 個 網 頁 設 定 成 需 要 先 登 入 才 能 訪 問 的 網 頁 , 因 此 我 將 Edit 內 的 程 式 碼 做 下 列 的 修 改 : 

WebRequestHandler.AddWebModuleFactory(TWebPageModuleFactory.Create(TEdit, TWebPageInfo.Create(

  [wpPublished , wpLoginRequired],'.html'),crOnDemand, caCache));

 

 

完 成 後 就 可 以 執 行 程 式 來 看 看 成 果 了 , 正 常 的 話 使 用 者 必 須 要 Login 之 後 才 能 訪 問 Edit 網 頁 , 這 點 倒 是 很 正 常 , 但 你 有 沒 有 發 現 到 一 個 問 題 :

 

Q2.jpg

 

上 圖 中 我 們 看 到 了 使 用 者 可 以 改 變 NextPage 來 選 擇 Login 後 導 向 的 網 頁 , 這 在 很 多 情 況 下 不 適 用 , 因 為 我 們 可 能 不 想 讓 使 用 者 改 變 這 個 設 定 , 我 們 可 能 想 要 在 程 式 中 判 斷 或 是 將 這 個 值 設 死 。 以 目 前 的  TLoginFormAdapter 來 看 , 這 個 NextPage 屬 性 是 保 護 層 級 的 , 那 也 代 表 著 我 們 無 法 改 變 她 , 據 Delphi R&D 的 說 法 是 Patch 後 就 會 公 開 這 個 屬 性 了 , 目 前 我 們 可 以 使 用 以 下 的 技 巧 來 完 成 這 個 動 作 :

 

TProtectedLoginFormAdapter=class(TLoginFormAdapter);

 
 

… … … … … .

 
 

TProtectedLoginFormAdapter(LoginFormAdapter1).NextPage:='Home';

 
 

 

如 果 你 看 過 我 的 另 一 篇 文 章 的 話 , 那 這 個 技 巧 對 你 來 說 應 該 是 蠻 熟 悉 的 。 你 可 以 將 這 段 程 式 碼 放 至 在 Module 的 Activate 事 件 中 , 當 你 成 功 登 入 系 統 並 選 擇 Next Page 為 Code6421 的 首 頁 後 , 你 應 該 會 看 到 這 樣 的 畫 面 : 

Q3.jpg

 

這 樣 你 應 該 清 楚 了 Session 的

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10796304/viewspace-952217/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10796304/viewspace-952217/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值