cookie:
cookie分为二种
1,以文件方式存在硬盘空间上的长期性的cookie
2,停留在浏览器所占内存中的临时性的cookie
浏览网站时,你会经常发现网站登录的地方,会有提示,问你是不是要记住自己的登录状态,像这种情况,登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上,这种是属于第一种cookie;平时如果你没勾选记住密码,则退出浏览器的时候cookie就会自动清除,下次访问网站则需要重新登陆,这种cookie是第二种。
cookie是保存在客户端的,它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。服务器是通过http里的Set-Cookie来创建cookie的,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,或者本地内存中数据。因为cookie是存在客户端的,很容易被用户读取,虽然cookie里的信息可以加密,但是也很容易被恶意利用。.
session:
session跟cookie有点类似,都是用来记录用户信息的,但是它是存储在服务器端的。
以php为例,sesion使用的一个简单流程:
当服务器需要给某个客户端创建一个session的时候,(php使用session_start()函数来创建一个session)先检查是否已经存在该客户端的session,检查的方式就是通过session标识(sessionid),服务器会检查这个标识来检查服务器上是否有对应的session。如果没有,则创建一个。
创建完了会在客户端为该网站设置保存的cookie中添加一个值,这个值就是sessionid。当浏览器下次访问服务器的时候,服务器检查这个值,如果能在服务器中找得到这个标识(sessionid),就能使用对应的session。
这里涉及到一个知识,sessionname,也就是session的名称。php对cookie操作是将其转换成一个数组,服务器向客户端的cookie插入session标识时,是插入一条key值为sessionname的数据(元素):$_COOKIE[sessionname],value是sessionid。当服务器读取cookie时,看到key为sessionname就知道这条数据存的就是session标识(sessionid),再通过这个标识去找到相应的session。sessionname是固定的一个常量,可以到php.ini文件里去设置,默认为PHPSESSID。。当服务器获取客户端的session标识时,直接读取$_COOKIE[sessionname]的值就是了。
这里可以用这两句代码证明:
echo $_COOKIE['PHPSESSID'].’=’.session_id();
echo $_COOKIE[session_name()].’=’.session_id();
php中,可以用session_id()来设置或者获取sessionid值,也可以用session_name()来获取或者设置session.name值。
这里有个误区,很多资料都说默认的session失效时间是当客户端关闭浏览器的时候,事实上浏览器关闭的时候是不会通知服务器的,服务器也就没法在客户端浏览器关闭的时候删除session了。但平时我们确实这样感觉的,因为关闭了浏览器后在访问就得重新登录了,其实原因是这样的:
虽然服务器检测不到客户端关闭从而不能在客户端关闭的时候删除session,但是cookie默认是在浏览器关闭的时候失效的,而cookie中存储的sessionid也被删除了,所以再次登录的时候也就找不到原来的sesion了。
而session也有个默认的失效时间,过了这个时间就被删除了。session的失效时间和session的失效时间都是可以手动设置的,这就是自动登录原理
8101

被折叠的 条评论
为什么被折叠?



