简介

在设计 Web 应用程序时,Web 开发人员有时需要访问不通过 URL 传递但会用于应用程序的变量信息。例如,日历 Web 应用程序可能会要求访客提供他们的时区首选项。然后,它可以在应用程序的所有页面中显示该时区的日期和时间。会话变量可以实现此功能。

尽管会话变量是 Web 开发人员可以使用的工具集中一个功能强大的工具,但 Dreamweaver 不会自动生成使其正常工作所需的全部代码。本文档介绍会话变量并提供在 Dreamweaver 支持的不同服务器模型中使用会话变量的步骤。

必要条件

要使用和理解本文档中的内容,开发人员需要使用服务器模型(例如 ASP 或 ColdFusion)。开发人员需要具备以下概念方面的专业知识。此外,他们使用的 Dreamweaver 版本必须支持动态开发(Dreamweaver MX 或 Dreamweaver MX 2004)。请参阅 Dreamweaver 使用手册或帮助系统的相关部分以了解更多信息。

  • 准备建立动态站点
  • 制作动态页面

会话变量的工作方式

借助会话变量,开发人员可以通过设置在访客的会话期间应用程序可访问的变量来存储访客信息。

会话变量具有以下特征:

  • 除非另外指定,否则会话变量将在访客离开站点 20 分钟后过期。
  • 如果 20 分钟内未在站点上检测到特定站点访客的任何活动,则会话变量将过期。如果访客退出 Web 浏览器,它们也会过期。
  • 为了使会话变量可以正常工作,访客的浏览器需要设置为接受 Cookie。
  • 站点的所有页面在 Web 服务器上需要位于同一目录中。
  • 存储在会话变量中信息是特定于站点访客的。一个站点访客不能访问其他访客的会话变量信息。

通常,开发人员通过让访客在 Web 应用程序中填写表单来获取会话变量的数据。会话变量设置为表单字段的值。此技术文件中的示例使用表单元素中的信息来设置会话变量的值。

对于除 ASP.NET 以外的所有服务器模型,Dreamweaver 具有菜单驱动的功能,该功能会在创建会话变量后将会话变量写入页面。但是,对于为会话变量赋值(也称为实例化会话变量),Dreamweaver 未提供菜单驱动的功能。需要在源代码中手动为会话变量赋值。

在 ASP、ColdFusion、JSP 或 PHP 应用程序中创建会话变量

注意:由于 ASP.NET 通常使用 Web 表单而不是传统 HTML 表单,因此 ASP.NET 的示例与其他服务器模型有很大的区别。如果您使用的是 ASP.NET 服务器模型,请参阅本文档末尾的 ASP.NET 示例

  1. 定义一个 ASP、ColdFusion、JSP 或 PHP 网站。
  2. 在站点内创建三个动态页面。第一个页面包含一个 HTML 表单(下一步骤中有相关说明),该表单将提交到第二个页面。在第二个页面上,创建指向第三个页面的超链接。

    注意:此示例之所以使用三个页面,是为了证明会话变量可用于第二个、第三个和后续页面。请求变量是会话变量的替代项,这类变量可以从一个页面传送到另一个页面。但是,它们不可用于第三个或后续页面。

  3. 第一个页面上,创建一个表单,其中包含一个文本字段表单元素和一个提交按钮。确保表单控件属性按如下方式进行设置:
    • 使用属性检查器选择文本字段并将其命名为“txtFirstName”。
    • 选择 form 标记(单击表单控件周围的红色虚线或在标记选择器中单击 form 标记)。在属性检查器中将第二个页面设置为表单动作。将 post 指定为表单方法。通常还会将“get”方法用于会话变量,但为了简化起见,此示例使用 post 方法。
  4. 第二个页面上,启动代码视图(“视图”>“代码”)。在起始 <html> 标记上面,键入以下列表中适用于您服务器模型的代码:

    此代码从在第一个页面上创建的名为“txtFirstName”的表单元素中提取内容。然后,将创建名为“sessFirstName”的会话变量,会话变量设置为等于该表单元素的内容。换句话说,此代码创建用于存储用户在表单页面上输入的信息的会话变量。

    • ASP (VBScript)(确保代码位于一行中,并且无换行符)

      <%session("sessFirstName")=Request.Form("txtFirstName")%>
    • ASP (JavaScript)(确保代码位于一行中,并且无换行符)
      <%Session("sessFirstName")=String(Request.Form("txtFirstName"))%>
    • ColdFusion
      <cfset Session.sessFirstName = #Form.txtFirstName#>

      要使用会话变量,ColdFusion 还要求在站点根目录中创建 Application.cfm 文件(如果您的站点尚未具有该文件)。Application.cfm 文件必须包含以下代码:

      <CFAPPLICATION NAME="Name" SESSIONMANAGEMENT="Yes">

      注意:在 UNIX 系统上,文件名区分大小写。确保拼写的 Application.cfm 文件名的首字母 A 为大写。有关其他 Application.cfm 设置,请参阅 ColdFusion 文档。
    • 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();?>

      您可以通过在 php.ini 文件中启用 session.auto_start 选项,让 PHP 自动启动会话,而不是在每个页面上调用 session_start() 函数。有关为会话处理配置 PHP 的更多信息,请参阅使用 PHP 4 处理会话
  5. 仍在此页面中,通过选择“窗口”>“绑定”打开“绑定”面板。从加号 (+) 菜单中,选择“会话变量”。在“会话变量”对话框的名称字段中,输入“sessFirstName”(不带引号),然后单击“确定”。
  6. 展开显示在“绑定”面板中的会话变量图标。将“sessFirstName”图标拖动到“文档”窗口中。会话变量的内容将写入此页面。
  7. 打开第三个页面并重复步骤 4 和 5。此外,确保第二个页面具有指向第三个页面的链接。
  8. 保存、发布并测试所有三个页面。如果没有实现预期结果,请检查表单元素、会话变量和请求变量的大小写和拼写。会话图标现在显示在此站点上每个页面的“绑定”面板中。

 

在 ASP.NET 中创建会话变量

  1. 定义一个 ASP.NET 网站。
  2. 在站点中创建两个页面。第一个页面包含一个 ASP.NET Web 表单,该表单向自身回发,然后重定向到第二个页面。

    注意:此示例之所以使用两个页面,是为了证明会话变量可用于第二个、第三个、第四个和后续页面。请求变量是会话变量的替代项,这类变量无法从一个页面上的 ASP.NET Web 表单传送到另一个页面

  3. 第一个页面必须包含一个 ASP.NET Web 表单,该表单包含一个 <asp:textbox> 服务器控件和一个 <asp:button> 服务器控件。将文本框控件的“id”属性设置为“txtFirstName”。下面提供了第一个页面的完整代码。根据您为 ASP.NET 站点选择的语言,选择 C# 或 VB。

    此代码从名为“txtFirstName”的 <asp:textbox> 服务器控件提取内容。它将创建名为“sessFirstName”的会话变量,会话变量设置为等于该服务器控件的内容。换句话说,此代码创建用于存储用户在表单页面上输入的信息的会话变量。

    • 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>
  4. 在第二个页面上,通过选择“视图”>“代码”访问代码视图,然后输入下面的代码以将会话变量的内容写入页面。再次根据您为 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>
  5. 保存、发布和测试两个页面。如果没有实现预期结果,请检查服务器控件、会话变量和请求变量的大小写和拼写。

其他信息

有关会话变量的更多详细信息,请参阅以下文章:

 

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可  Twitter™ 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。

法律声明   |   在线隐私策略