四种会话跟踪
什么是会话
会话就是客户端向服务器发起请求,服务器响应客户端请求的全过程。
什么是会话跟踪
对同一个用户对服务器的连续的请求和接受响应的监视。
为什么需要会话跟踪
浏览器和服务器之间的通信,是通过HTTP协议进行的,而HTTP是无状态协议,不能保存客户的信息,一次响应完成之后连接就断开了,下一次的请求需要重新连接,为了判断是否是同一个用户,所以才需要会话跟踪技术来实现这种要求 。
会话跟踪的方法
1. URL重写
URL重写是在客户端浏览器不支持cookie的情况下使用的,它是客户端浏览器请求服务器时,URL地址后面加上类似于 “SESSIONID=***”形式的参数,服务器端通过获取SESSIONID关键字来获取会话值。
2. 隐藏表单域
仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。
3. cookie
cookie不能走文件协议。
存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据。
cookie的特性:
- 不同的浏览器存放的cookie位置不一样,也是不能通用的
- cookie的存储是以域名形式进行区分的
- cookie的数据可以设置名字的
- 一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样
- 每个cookie存放的内容大小也是有限制的,不同的浏览器存放大小不一样
- cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。
获取:
document.cookie
function getCookie(key) {
var arr1 = document.cookie.split('; ');
for (var i=0; i<arr1.length; i++) {
var arr2 = arr1[i].split('=');
if ( arr2[0] == key ) {
return decodeURI(arr2[1]);
}
}
}
function getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
设置:
document.cookie = '名字=值';
document.cookie = '名称=值;expires=' + 字符串格式的时间; // cookie默认是临时存储的,当浏览器关闭进程的时候自动销毁
function setCookie(key, value, t) {
var oDate = new Date();
oDate.setDate( oDate.getDate() + t );
document.cookie = key + '=' + value + '; expires=' + oDate.toUTCString();
}
删除:
function removeCookie(key) {
setCookie(key, '', -1);
}
指定过期时间:; expires=
指定可访问域名:; domain=
指定可访问路径:; path=
4. session
第一次访问服务器,服务器会在响应报文中的 Set-Cookie
属性中添加 JESSIONID=xxx
的属性值,客户端会将 Set-Cookie
中的值存储到客户端的 Cookie 中去,等下一次访问该服务器时,会将该内容放在请求报文中的 Cookie 属性中,一并发送给服务器。
缺点:
- 依赖 Cookie,浏览器必须要支持Cookie。或者用URL重写、隐藏表单域等方法,但依旧存在确定
- 过多的浏览器请求,会在服务器端创建很多的Session信息,会对浏览器造成一定的内存压力,而且不易于维护