20050501
1、什么是Session
Session是另一种记录客户状态的机制.当某一客户端浏览器访问服务器的时候,服务器可以通过创建session来记录客户端状态,并返回一个cookie(里面保存有sessionid)到客户端浏览器
2、Session的作用
客户端浏览器再次访问服务器时会带上存有sessionid的cookie,通过sessionid来访问该客户在服务器上所创建的session对象。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要通过sessionid查询所属客户档案就可以了。
每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对
3、使用Session注意事项
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为sessionid的Cookie,Session依据该Cookie的sessionid来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。
因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。就需啊另一种解决方案:URL地址重写。
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreatSession();
string user = Session["user"].ToString();
List<Student> students = Session["students"] as List<Student>;
}
public void CreatSession()
{
Session["user"] = "MySession";
List<Student> students = new List<Student>();
Student student1 = new Student
{
Name = "xiao-wu", Age = 15
};
Student student2 = new Student
{
Name = "tang-san",
Age = 16
};
students.Add(student1);
students.Add(student2);
Session["students"] = students;
}
}
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
}
在服务器某页面有创建session时,客户端浏览器访问该页面服务器会生成一个cookie(里面存储的是sessionid)保存在浏览器,每当客户端浏览器向服务器发送请求时都会带上该cookie, 从而该客户可以访问在服务器创建的所有session. session是可以跨页面访问的,viewstate不可以跨页面访问 session默认过期时间为20分钟