session和cookie自动登录机制,以及二者的区别

1、为什么需要session和cookie
   浏览器和服务器之间的交互,就好比打电话,一次交互可以理解为一次会话。我们登录一个网站,在一个网站上不同的页面浏览(始终在同一个域名下),最后退出这个网站,也是一个会话。一个网站对于不同的用户会展示出不同的页面信息,但是在HTTP协议中,客户端请求服务端是一种无状态的连接-每次请求都是独立的请求,服务器怎么分辨这些请求是哪个用户发出的请求呢
   如果不能分辨哪个用户发出的请求,就不知道该反馈哪个用户的信息回来,那试想我们登录网站之后,显示的都是别人的信息岂不乱套了。所以服务器需要知道发出请求的是谁,需要一个用户标识来保证会话的正常进行。这样就有了session和cookie的用武之地。
   简而言之,区别不同访问用户,以针对不同用户作特殊处理

2、Session的概念
  Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
  由于Session存放在服务器端,所以随着时间的推移或者用户访问的增多,会给服务器增加负担。使用的时候要考虑下服务器的性能。

3、Cookie的概念
  Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
  由于Cookie是存放在客户端,是可见的,安全性就会很低。因此不建议将一些重要的信息放在cookie中。

4、两者的区别
 1、cookie是浏览器本地存储机制,存在域名之下,存储不安全。session是服务器在返回id时通过规则生成一串字符,并设置了过期时间。存储在服务器端(数据库)
 2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
 3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑性能应当使用cookie。
 4、不同浏览器对cookie的数据大小限制不同,个数限制也不相同。
 5、可以考虑将登陆信息等重要信息存放为session,不重要的信息可以放在cookie中。

5、session设置和获取

//设置
 localStorage.setItem("key", "val");
 //获取
 var token = localStorage.getItem("key");
 //清除某个值
 localStorage.removeItem("key"); 
 //清空所有
 localStorage.clear()

6、cookie设置和获取

// 使用 jquery.cookie.js插件来操作cookie
<script type="text/javascript" src="lib/jquery.cookie.min.js"></script>

//设置cookie
$.cookie('key', 'val');   
> 这里没有指明 cookie有效时间,所创建的cookie有效期默认到用户关闭浏览器为止

$.cookie('key', 'val', { expires: 7 });    
> 指明了cookie有效时间为 7 天

$.cookie('key', 'val', { expires: 7, path: '/' }); 
> 在默认情况下,只有设置 cookie的网页才能读取该 cookie。  
> 如果想让一个页面读取另一个页面设置的cookie,必须设置cookie的路径。   cookie的路径用于设置能够读取
> cookie的顶级目录。   将这个路径设置为网站的根目录,可以让所有网页都能互相读取 cookie   
> (一般不要这样设置,防止出现冲突)


//获取cookie
$.cookie('key');


//删除cookie
$.cookie('key', null);   //通过传递null作为cookie的值即可


//插件的可选参数
$.cookie('the_cookie','the_value',{
    expires:7,  
    path:'/',
    domain:'jquery.com',
    secure:true
})
expires:(Number|Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期;
path:(String)创建该Cookie的页面路径;
domain:(String)创建该Cookie的页面域名;
secure:(Booblean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;

页面自动生成的cookie,浏览器无法操作,浏览器只能操作自已设置的cookie

参考页面 https://blog.csdn.net/qq_29207823/article/details/81745757

发布了88 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yiyueqinghui/article/details/102744828