Cookie|Session

一.认识Cookie、Session(会话)

二.操作Cookie和Session

三.登陆操作

 一.认识Cookie、Session(会话)

  Cookie是http请求header中的一个属性。Cookie是服务器持久化存储数据的一种机制,因为网页无法访问主机的文件系统。Cookie是用键值对的格式保存数据。

  Session是服务器存储数据的一种机制(非持久化存储)。在Cookie中存储的用户身份标识可以理解为sessionId,每个用户都有一个session和sessionId,服务器中存储了很多个session。服务器中会通过类似于hash这样的键值对结构来存储session(session是value,sessionId是key),session里面是用户的各种信息。

  举个例子,去医院看病,看病之前医生会让你刷就诊卡,就诊卡就相当于是Cookie(Cookie里存储了你的身份标识即sessionId),刷卡的过程就是通过查询身份标识得到身份信息(基本信息、开的药品信息、既往病例、账户余额等)显示在医生电脑上。这些身份信息存储在服务器中,而每个用户都有一个这样的身份信息,服务器是如何组织这样的信息的?存储在数据库中,不过在服务器代码逻辑展开的过程,这些数据会在数据库中查询出来后先被临时保存到某个内存结构中(session会话),后续有修改的话先修改内存再重新写入数据库。

二.操作Cookie和Session

通过Servlet api来操作上述结构。

Cookie是浏览器的机制,Servlet提供api来获取cookie。

Session是服务器的机制,servlet内部已经封装好了,而且提供api让我们可以使用。

(1)关键类:HttpServletRequest

关键方法:

 : 这个方法能得到请求中的所有的Cookie,返回值中Cookie对象是一个键值对(name,value)。

:这个方法能从Cookie中获取SessionId再从服务器的hash表中(服务器中存在多个会话,类似于Hashmap<String,HttpSession>,String是sessionId,HttpSession是Session对象)得到Session。而且如果在服务器的hash表中没查到session会自动创建出键值对,也就是分配新的SessionId并且创建新的HttpSession对象(主要给“登录”场景使用的)。

(2)关键类:HttpServletResponse

关键方法:

:把指定的Cookie添加到响应中,用于服务器给浏览器返回Cookie。

(3)关键类:HttpSession

关键方法:

:session里面的键值对(类似于这些)就是由这两个方法完成的。

(4)关键类:Session

关键方法:

//Session和Cookie机制其中最重要的作用就是完成登录功能。

三.登陆操作

1.登录页面(html):浏览器向服务器发起一个HTTP请求(请求中带有用户名和密码),触发登录逻辑。

2.Servlet处理登录请求。

通过Servlet读取用户名和密码并且验证是否登陆成功。若登陆成功就给用户分配会话(Session:保存用户信息),并且把SessionId通过Cookie返回给客户端,客户端把Cookie保存起来。

3.网站主页。

通过另外一个Servlet生成动态页面,这个页面会把用户数据显示出来。

比如张三登录,页面就会显示“欢迎你张三”。

编写代码部分:

(1)先写登录页面:

浏览器中显示:

//浏览器构造http请求的方式:

(1)url输入地址(GET)

(2)特殊的html标签,像a,img,script标签(GET)

(3)form表单(GET,POST)

(4)ajax(GET,POST,PUT,DELETE)

预期发送的请求:

Post login

Content-type:application/x-www-form-urlencode

username=zhangsan&password=123

(此处请求使用form表单,还可以使用json,使用json就需要使用ajax的方式构造请求)

(2)写servlet处理上述请求:

其中这个方法:

这个方法根据请求的Cookie的SessionId查询服务器中的hash表,找到对应的Session对象。如果客户端的Cookie中没有SessionId(首次登陆)或者服务器中没有找到session,就会自动创建出一个Session对象和分配SessionId,并且在响应报头中加上set-Cookie字段(SessionId),让客户端使用Cookie保存。

参数为true会自动创建,参数为false不会自动创建直接返回null。

(3)再写重定向后的代码:

 捋一遍:

浏览器拿到响应报文就会把Set-Cookie字段保存到浏览器的Cookie中,key:,value:。(保存后每次访问服务器都能带上这个Cookie)

//可以给Cookie设置过期时间,时间到浏览器就会把Cookie删除。也可以给Session设置过期时间,时间到服务器自动删除会话。

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值