理解session机制

Posted 专注前端开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解session机制相关的知识,希望对你有一定的参考价值。

理解session机制 
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID。

 

每个客户端不论有没有登录,只要访问服务器都会产生一个session(设置了session的服务器)附带sessionId,并且会发送给客户端;

一般使用cookie发送sessionId,用户的cookie中带有sessionid;用户在访问别的页面的时候发生如下几件事情;

服务器用过cookie的sessionid查找session;将session挂载到req上;这样用户去别的页面也会带有req.session;

以上事件动作,不论用户有没有登录都会发生,设计登录网站的模式就是检验session中是否有用户信息;根据用户信息显示相应的页面;

只不过没有登录的用户,用户信息不会被保存到session中;

登录用户的信息保存在session中的动作,一般通过post方式的回调完成;

若用户登录,通过用户登录传过来的参数(req.body.name,req.body.password)查找用户信息,手动将用户信息保存到session中(

req.session.user = user),user来自于,User.findOne({nam:ereq.body.name,password:req.body.password},function(err,user){

req.session.user = user;

将用户的信息保存到req.session中;req.session类似一个对象,也可以叫做散列表(哈希表,对象字面量);

});

执行了以上动作之后;用户在登录其他页面,动作一次执行如下:

1、通过cookie中的sessionid查找session;并通过中间件把session挂在到req(request)上;

2、验证req.session中是否登录,并根据req.session.user其中用户显示相应信息;

 

 

 

以上是关于理解session机制的主要内容,如果未能解决你的问题,请参考以下文章

理解Cookie和Session机制

理解Cookie和Session机制

理解Cookie和Session机制

深入理解Cookie和Session机制

正确理解cookie和session机制原理

cookie,Session机制的本质,跨应用程序的session共享