当前位置:首页 > 服务端 > session、cookie与“记住我的登录状态”的功能的实现

session、cookie与“记住我的登录状态”的功能的实现

2022年08月05日 20:05:32服务端12

Cookie的机制

Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。

Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires属性标识了Cookie的有 效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。

如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了。这种生命期为浏览会话期的 Cookie被称为会话Cookie。会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘 上,关闭后再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗 口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。

Session的机制

Session是存放在服务器端的类似于HashTable结构(每一种Web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户 数据,当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

一般情况下,服务器会在一定时间内(默认20分钟)保存这个HashTable,过了时间限制,就会销毁这个HashTable。在销毁之前,程序员可以 将用户的一些数据以Key和Value的形式暂时存放在这个HashTable中。当然,也有使用数据库将这个HashTable序列化后保存起来的,这 样的好处是没了时间的限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。

Session的客户端实现形式(即Session ID的保存方法)

一般浏览器提供了两种方式来保存,还有一种是程序员使用HTML隐藏域的方式自定义实现:

[1] 使用Cookie来保存,这是最常见的方法,本文“记住我的登录状态”功能的实现正式基于这种方式的。服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。

[2] 使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置 Cookie过期时间是一样的。

[3] 第三种方式是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后 者比较麻烦。

实现“记住我的登录状态”的功能

前面我们了解到,如果我们将Session ID通过Cookie发送到客户端的时候设置其过期时间为1年,那么在今后的一年时间内,客户端访问我的网站的时候都回将这个Session ID值发送到服务器上,服务器根据这个Session ID从内存或者数据库里面恢复存放Key-Value对的Hashtable。

其实这已经很好的实现了我们的功能了。但是,前面也提到了,实际上Session并不会一直都存在的,过了一定的时间之后,服务器上的Session就被 销毁了,以减轻服务器的访问压力。当服务器上的数据被销毁后,即使客户端上存放了Cookie也没有办法“记住我的登录状态”了。

通用的实现办法是,将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端,当服务器上的Session销毁以后,使用Cookie里面存 放的用户名和加密之后的密码重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID,而这个操作是发生在用户请求一个需要身份验证的页面资源的背后,对于用户来讲是透明的,于是就达到了“记住我的登录状态”的目的了。

到目前为止,已经基本明确了“记住我的登录状态”的实现方式和理论依据,后文将使用jsp和php两种Web开发技术来具体实现这个功能。

设置cookie操作:

HttpCookie cookiesName = new HttpCookie("name");
cookiesName.Expires = System.DateTime.Now.AddHours(2);
cookiesName.Value = user.Name;
Response.Cookies.Add(cookiesName);

注销cookie操作:

foreach (var item in Request.Cookies.AllKeys)
{
HttpCookie cookieName = Request.Cookies[item];
if(cookieName!=null)
{
cookieName.Expires = System.DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookieName);
Request.Cookies.Remove(item);

}

}

 

作者:xlh
来源链接:https://www.cnblogs.com/xlh-2014/p/8110685.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/17949.html

标签: CookieSession
分享给朋友:

“session、cookie与“记住我的登录状态”的功能的实现” 的相关文章

服务器端Session和客户端Session, 以及cookie的区别

Session其实分为客户端Session和服务器端Session。 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这...

session,ajax 跨域cookie

 什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则...

cookie窃取和session劫持

cookie窃取和session劫持

【转】cookie窃取和session劫持 Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容。 此篇文章的Presentation戳这里。 一、cook...

HTTP协议-Cookie和Session详解

HTTP协议-Cookie和Session详解

前言: 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的跟踪技术就是Cookie和Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器记录确定用户身份。 本章将系统的讲述Cookie和Sessio...

你必须知道的session与cookie

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是s...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

APPlication,Session和Cookie的区别

APPlication,Session和Cookie的区别

  方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生...

Cookie、Session和Token认证

Cookie、Session和Token认证

目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需...

cookie和session的区别,分布式环境怎么保存用户状态

1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 2、session中保存的是对象,cookie中保存的是字符串。 3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访...

Servlet之cookie和session简介及其作用

Servlet之cookie和session简介及其作用

一、cookie和session简介 1.浏览器和服务器是多对一的关系 2.业务:登录时记录账号,后续的页面上显示此账号 3.使用如下对象存储账号都不行 request:多个请求之间共用账号,不能用request c...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。