Session的基础知识

来源:互联网 发布:linux 多进程读写文件 编辑:程序博客网 时间:2024/06/14 11:15

Session是一对一的关系,每一位链接到此网页使用该变量的浏览者都有自己的session变量,并且彼此之间并不相关,生命周期<始于第一次打开网页,止于关闭网页;也可自己设置timeout来控件它的生命周期;

Session有以下特点:

  • Session中的数据保存在服务器端;
  • Session中可以保存任意类型的数据;
  • Session默认的生命周期是20分钟,可以手动设置时间

我们在aspx页面中的调用一般只需要这么写:<%=session["key"]=value %>;

获取session时一般这么写:string username=session["username"],但是在给对象赋值的时候我们需要注意两点

1:判断是否为null

2:类型的转换

用重定向去跳转到指定页面;要注意:如果我们的请求是通过Ajax方法的时候,重定向是不起作用的!

好,那这里让我们分析一下Response.Redirect的跳转原因:

->Response.Redirect是本地跳转,并不服务端跳转;是往浏览器端输出一个响应码,这个响应码为301或者302,告诉浏览器跳转。

Session释放方式:

session.remove();

session.removeAll();

   session.Abandon();

Session传递数组的用法:

protected void Button1_Click(object sender, EventArgs e)    {        ArrayList sArr = new ArrayList();        sArr.Add("0");        sArr.Add("1");        sArr.Add("2");        sArr.Add("3");        sArr.Add("4");        sArr.Add("5");        Session["Array"] = sArr;        ArrayList sRarr = new ArrayList();        string ssMsg = "";        sRarr = (ArrayList)Session["Array"];        ssMsg = sRarr[3].ToString();        Response.Write("<script>window.alert('" + ssMsg + "')</script>");    }
使用Session验证用户登录
if (txtName.Text == "mr" && txtPassword.Text == "mrsoft"){Session["UserName"] = txtName.Text.Trim();Response.Redirect("a.aspx");}

Session对象默认失效期为20分钟,用户也可以在Web.Config中对其进行设置。

在用session的时候让我想到我用过的viewdata,我感觉这两个都能起到传值的作用。

MVC中的弱类型,主要有ViewDataTempData
实则上应该都是字典,用于键值对应关系,分别对应ViewDataDictionary以及TempDataDictionary。
ViewData只能在当前的HTTP请求中,不会像session一样可以把数据带到下一个HTTP请求。
TempData跟ViewData的区别是他是临时性的,例如取代一些viewstatus一样保存客户端的上一次数据。他的内部是通过session来保存的。只要被取用一次后就自动清除session。


Session 对象
可以使用 Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session
对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session
对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session
对象中。有关使用 Session 对象的详细信息,请参阅“asp应用程序”部分的“管理会话”。
注意 会话状态仅在支持 cookie 的浏览器中保留。
语法
Session.collection|property|method
集合
Contents 包含已用脚本命令添加到会话中的项目。
StaticObjects 包含通过 <OBJECT> 标记创建的并给定了会话作用域的对象。
属性
CodePage 将用于符号映射的代码页。
LCID 现场标识。
SessionID 返回用户的会话验证。
Timeout 应用程序会话状态的超时时限,以分钟为单位。
方法
Abandon 该方法破坏 Session 对象并释放其资源。
事件
global.asa 文件中声明下列事件的脚本。
Session_OnEnd
Session_OnStart
有关以上事件及 global.asa 文件的详细信息, 请参阅 Global.asa 参考.
注释
您可以在 Session 对象中存储值。存储在 Session 对象中的信息在会话及会话作用域内有效。下列脚本演示两种类型的变量的存储方式。
<%
Session("username") = "Janine"
Session("age") = 24
%>
但是,如果您将对象存储在 Session对象中,而且您使用 VBScript 作为主脚本语言。则必须使用关键字 Set。如下列脚本所示。
<% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>
然后,您就可以在后面的 Web 页上调用 MyComponent.class1 揭示的方法和属性,其调用方法如下:
<% Session("Obj1").MyMethod %>
也可以通过展开该对象的本地副本并使用下列脚本来调用:
<%
Set MyLocalObj1 = Session("Obj1")
MyLocalObj1.MyObjMethod
%>
创建有会话作用域的对象的另一种方法是在 global.asa 文件中使用标记。
但是不能在 Session 对象中存储内建对象。例如,下面每一行都将返回错误。
<%
Set Session("var1") = Session
Set Session("var2") = Request
Set Session("var3") = Response
Set Session("var4") = Server
Set Session("var5") = Application
%>
在将对象存储到 Session 对象之前,必须了解它使用的是哪一种线程模型。只有那些标记为“Both”的对象才能存储在没有锁定单线程会话的
Session 对象中。详细信息, 请参阅“创建 ASP 组件”中的“选择线程模型”。
若您将一个数组存储在 Session对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。
<% Session("StoredArray")(3) = "new value" %>
这是因为 Session对象是作为集合被实现的。数组元素 StoredArray(3) 未获得新的赋值。而此值将包含在 Application
对象集合中,并将覆盖此位置以前存储的任何信息。
我们极力建议您在将数组存储在 Session对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在
Session 对象中,这样您所做的任何改动将被存储下来。