簡介
設計網路應用程式時,網頁開發人員有時會想要存取在應用程式中可用,但未透過 URL 傳輸的變數資料。舉例來說,某個行事曆網路應用程式可能會詢問訪客的時區偏好設定。然後,應用程式就會在應用程式的所有頁面中顯示該時區的日期與時間。Session 變數可以提供這種功能。
雖然 Session 變數是網路開發人員的強大工具,Dreamweaver 並不會自動產生所有讓其運作所需的程式碼。本文件將描述 Session 變數,並提供在 Dreamweaver 支援的不同伺服器模式中使用 Session 變數的步驟。
必要條件
想要使用和瞭解本文件的開發人員必須正在使用某種伺服器模式,例如 ASP 或 ColdFusion。開發人員必須具有以下概念的實用知識。同時,他們也必須使用支援動態開發的 Dreamweaver 版本 (Dreamweaver MX 或 Dreamweaver MX 2004)。請參閱「使用 Dreamweaver」手冊或「說明」系統中的相關區段以深入瞭解。
- 準備建立動態網站
- 使頁面具有動態功能
Session 變數的運作方式
透過設定應用程式可在訪客工作階段期間存取的變數,Session 變數可讓開發人員儲存訪客資訊。
Session 變數具有以下特性:
- 除非另行指定,否則 Session 變數會在訪客離開網站的 20 分鐘後過期。
- 如果網站已有 20 分鐘未偵測到該網站訪客的活動,Session 變數便會過期。如果訪客關閉網路瀏覽器,Session 變數也會過期。
- 為了讓 Session 變數能夠運作,訪客的瀏覽器必須設定為接受 Cookie。
- 該網站上的所有頁面都必須位於網站伺服器上的單一目錄中。
- Session 變數中儲存的資訊會依據個別網站訪客而定。不同的網站訪客無法存取別人的 Session 變數資訊。
一般而言,開發人員會透過讓訪客在網路應用程式中填寫表單來擷取 Session 變數的資料。Session 變數會設定為一個表單欄位的值。本 TechNote 中的範例會使用表單元素的資訊來設定 Session 變數的值。
對於 ASP.NET 之外的所有伺服器模式,Dreamweaver 都具有選單式的功能,可在 Session 變數建立後對網頁上寫入 Session 變數。但是,Dreamweaver 並不提供選單式的功能來指派 Session 變數的值 (亦稱將 Session 變數起始化)。您必須在原始碼中手動指派 Session 變數的值。
在 ASP、ColdFusion、JSP 或 PHP 應用程式中建立 Session 變數
注意: ASP.NET 的範例與其他伺服器模式差異甚大,因為 ASP.NET 通常是使用 Web 表單,而非傳統的 HTML 表單。如果您是使用 ASP.NET 伺服器模式,請參閱本文件最末的 ASP.NET 範例。
-
定義 ASP、ColdFusion、JSP 或 PHP 網站。
-
在網站內建立三個動態頁面。第一頁會含有提交到第二頁的 HTML 表單 (於下一步驟中說明)。在第二頁建立一個指向第三頁的超連結。
注意: 此範例之所使用三個頁面,是為了證明 Session 變數可用於第二頁、第三頁以及後續的頁面上。Request 變數 (可替代 Session 變數) 可從一個頁面延續到第二個頁面。但是,Request 變數無法在第三頁或後續頁面上使用。
-
在第一頁上建立含有一個文字欄位表單元素和提交按鈕的表單。確認表單控制屬性設定如下:
- 選取文字欄位,並使用「屬性」檢視窗將其命名為「txtFirstName」。
- 選取表單標籤 (按一下環繞表單控制的紅色虛線,或按一下標籤選取器中的表單標籤)。在「屬性」檢視窗中將第二頁設定為表單動作。指定 Post 做為表單方式。「Get」方式也常與 Session 變數一起使用,但此範例為求簡單而使用 Post 方式。
-
在第二頁上啟動「程式碼」檢視 (「檢視 > 程式碼」)。在開啟的 <html> 標籤上方,輸入下方清單中代表您伺服器模式的代碼。
此代碼會從第一頁上建立名為「txtFirstName」表單元素中提取內容。之後,它會建立一個名為「sessFirstName」的 Session 變數,並會設定為等同於表單元素的內容。換言之,此代碼會建立一個 Session 變數,以保留使用者在表單頁面上輸入的資訊。- ASP (VBScript) (請確保代碼包含在單行上,而且無分行符號)
<%session("sessFirstName")=Request.Form("txtFirstName")%> - ASP (VBScript) (請確保代碼包含在單行上,而且無分行符號)
<%Session("sessFirstName")=String(Request.Form("txtFirstName"))%> - ColdFusion
<cfset Session.sessFirstName = #Form.txtFirstName#>
若要使用 Session 變數,ColdFusion 也必須在網站根目錄中建立 Application.cfm 檔案 (如果網站尚未建立此檔)。Application.cfm 檔案必須包含以下程式碼:
<CFAPPLICATION NAME="Name" SESSIONMANAGEMENT="Yes">
注意: 在 UNIX 系統上,檔案名稱必須區分大小寫。請確保 Application.cfm 檔案名稱使用大寫的 A。請參閱 ColdFusion 文件瞭解其他 Application.cfm 設定。 - JSP (請確保代碼包含在單行上,而且無分行符號)
<%session.setAttribute("sessFirstName", request.getParameter("txtFirstName"));%>
也可以使用以下程式碼,但最新的 Java 規格中已停用:
<%session.putValue("sessFirstName", request.getParameter("txtFirstName"));%> - PHP
<?php session_start(); session_register("sessFirstName"); $sessFirstName = $HTTP_POST_VARS['txtFirstName']; ?>
如果 Windows 的瀏覽器中發生 PHP 錯誤,則該 PHP 安裝可能沒有有效的工作階段資料儲存目錄。此參數在 PHP.ini 檔案以及 httpd.conf 檔案中皆稱為 session.save_path。目錄位置為選用,但可以使用以下設定:
session.save_path = c:\php\sessiondata
依據您的 PHP 設定,有時需要手動在所有工作階段相關頁面上啟用工作階段管理。將以下程式碼行置於各個頁面頂端:
<?php session_start();?>
與其在各個頁面上呼叫 session_start() 功能,您可以改為在 php.ini 檔案中開啟 session.auto_start 選項,讓 PHP 自動開始工作階段。
- ASP (VBScript) (請確保代碼包含在單行上,而且無分行符號)
-
在此頁面上,選擇「視窗 > 繫結」以開啟「繫結」面板。從加號 (+) 選單選擇 Session 變數。在「Session 變數」對話方塊中,在名稱欄位中輸入「sessFirstName」(不包含引號),然後按一下「確定」。
-
展開「繫結」面板中出現的 Session 變數圖示。將「sessFirstName」圖示拖曳到「文件」視窗上。Session 參數內容將寫入此頁面。
-
開啟第三頁並重複步驟 4 和 5。同樣地,請確保第二頁具有前往第三頁的連結。
-
儲存、發佈並測試這三個頁面。如果未取得預期的結果,請檢查表單元素、Session 變數以及 Request 變數的大小寫與拼字。現在可在此網站各頁面的「繫結」面板中看見 Session 圖示。
在 ASP.NET 中建立 Session 變數
-
定義 ASP.NET 網站。
-
在網站中建立兩個頁面。第一頁含有會自行回傳然後重新導向到第二頁的 ASP.NET 網站表單。
注意: 此範例之所以使用兩個頁面,是為了證明 Session 變數可用於第二頁、第三頁、第四頁以及後續的頁面上。Request 變數 (可替代 Session 變數) 無法從一個頁面上的 ASP.NET 網站表單延續到第二頁。
-
第一頁所包含的 ASP.NET 網站表單必須內含一個 <asp:textbox> 伺服器控制項和一個 <asp:button> 伺服器控制項。將文字方塊控制的「id」屬性設為「txtFirstName」。第一頁的完整程式碼提供於下方。視您為 ASP.NET 網站選用的語言而定,選擇使用 C# 或 VB:
此程式碼會從名為「txtFirstName」的 <asp:textbox> 伺服器控制項提取內容。它會建立一個名為「sessFirstName」的 Session 變數,並會設定等等於伺服器控制項的內容。換言之,此代碼會建立一個 Session 變數,以保留使用者在表單頁面上輸入的資訊。
- ASP.NET (VB) - 第 1 頁 <%@ Page Language="vb"%><script runat="server"> Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Session("sessFirstName") = Request("txtFirstName") Response.Redirect("session2.aspx") End Sub</script><html><head><title>Session Page 1</title></head><body> ASP.NET VB session variable and web form example - page 1 <form id="Form1" method="post" runat="server"><p>first name:<asp:TextBox id="txtFirstName" runat="server" /></p><p><asp:Button id="Button1" runat="server" Text="Submit" onClick="Button1_Click" /></p></form></body></html>
- ASP.NET (C#) - 第 1 頁 <%@ Page Language="C#" %><script runat="server"> void Button1_Click(object sender, EventArgs e) { Session["sessFirstName"] = Request["txtFirstName"]; Response.Redirect("session2.aspx"); }</script><html><head><title>Session Page 1</title></head><body> ASP.NET C# session variable and web form example - page 1<form id="Form1" method="post" runat="server"><p>first name:<asp:TextBox id="txtFirstName" runat="server" /></p><p><asp:Button id="Button1" runat="server" Text="Submit" onClick="Button1_Click" /></p></form></body></html>
-
在第二頁中,選擇「檢視 > 程式碼」以存取「程式碼」檢視,並輸入下方的程式碼以便將 Session 變數內容寫入頁面。同樣地,視您為 ASP.NET 網站選用的語言而定,選擇使用 C# 或 VB:
- ASP.NET (VB) - 第 2 頁 <%@ Page Language="vb" %><html><head><title>Session Page 2</title></head><body><p>ASP.NET VB session variable and web form example - page 2</p><p>first name: <%= session("sessFirstName") %></p></body></html>
- ASP.NET (C#) - 第 2 頁 <%@ Page Language="C#" %><html><head><title>Session Page 2</title></head><body><p>ASP.NET C# session variable and web form example - page 2</p><p>first name: <%=Session["sessFirstName"]%></p></body></html>
-
儲存、發佈並測試這兩個頁面。如果未取得預期的結果,請檢查伺服器控制項、Session 變數以及 Request 變數的大小寫與拼字。
其他資訊
如需更多有關 Session 變數的詳細資料,請參閱以下文章: