大家都知道http协议是一个无连接协议,无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
虽然可以节省传输时间,但是这种无连接方式会导致服务器不知道发送的请求用户是谁,所以web开发中要确认是哪个用户发送的请求,就有了session和cookie来标示用户
来说说他们产生的流程吧
一般情况下,用户注册完成开始登陆后,后台会生成一个sessionid,然后会把session夹杂在cookie中发给用户,如果浏览器没有禁用cookie的话,就会保存在浏览器的缓存中,当然cookie的有效期可以由后台规定,这样用户可以保存这段cookie在一段之间内用cookie去访问该网站的其他页面就会相当于登录的用户去访问(一般情况)
后台会根据传过来的request里的cookie(在有效期内)截取对应session字段内容,与服务器上保存的session进行匹配,匹配成功会判断该用户处于登录状态
用户再次登录服务器会检查缓存cookie里的sessionid是否过期,过期了就再往你客户端里重新发一个cookie
总的来说session 在服务器端,cookie 在客户端(浏览器)
为什么不直接存cookie?
首先cookie是不是太长了,你存这么大一串会浪费你的资源
其次可以使用cookie来分担后端服务器的压力而且对于用户是透明的机制
再然后安全session的sessionID是放在cookie里,要想破解session的话,第一要破解cookie。破解cookie后,你才能得到 sessionID,sessionID是有人登录,或者启动session创建才会有,你不知道什么时候会有人登录。第二,sessionID是加密的,第二次session创建的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文本文件,谁安全很显然了。如果你说这样还是会被破解,那我在后台还可以对session进行多次加密,然后再对cookie多次加密,你的破解难度会成指数级上升
所以别想知道session是多少了