当前位置 : 主页 > 编程语言 > java >

Jsp状态管理-cookie

来源:互联网 收集:自由互联 发布时间:2021-06-25
http协议的无状态性 浏览器再次发生请求,服务器不能识别是原来那个浏览器,服务器不会去记,就是无状态协议(这还是个协议?意思是记得的话反倒不好?所以要有这个协议?可为

http协议的无状态性

  浏览器再次发生请求,服务器不能识别是原来那个浏览器,服务器不会去记,就是无状态协议(这还是个协议?意思是记得的话反倒不好?所以要有这个协议?可为什么又需要session、cookie让服务器记得?)

Cookie

保存用户状态的两个机制

  session

  cookie

session是会话,客户端的请求携带一个id,服务器识别id确定用户身份。这么看的话,这个id是怎么生成的?根据ip?想要确定是同一个用户,只能是用IP了吧?IP确定是这台电脑,然后不同的浏览器可能还有不同,这两点可以确定一个会话id?

 

cookie就是web服务器保存在客户端的一些信息。比如浏览过的网页、比如一件登录过保存的用户名。

(服务器保存在客户端,怎么理解?保存cookie是服务器的行为,但是保存在了客户端而不是服务器上?)

这cookie是 request的方法还是response的方法?

不对,这个请求request是读取,客户端读取cookie。然后服务器端response是写入。也就是上面说的,服务器保存在客户端?

Cookie是以文本文件的方式保存的,其实就是字符串类型,所以这些方法的返回值或者参数一般也是字符串。

Cookie在登录上的使用

Login.jsp是登录界面,dologin.jsp是处理、保存cookie页面。

 

如果用户勾选了记住登录状态,isUseCookie(是  “十天内记住我的登录状态”   按钮的命名id)的值一定不为空,且长度大于0.

 

此时需要用cookie保存用户名和密码,并且设置其生成期限为10天(86400秒)。

Cookie的构造方法是键值对的方式:

  new Cookie(“username”, username);

  response.addCookie()保存。

(这段代码好像是很通用)

Else里是如果用户没有勾选,就把已有的cookie清空、期限设置为0.

 

 

这不符合显示吧,如果我已经勾选过了,那下一次登录时,比如第二天,我肯定不用勾选了。但你应该还要保存9天,结果我没选,你直接清空了,那我第三天登录就不行了。这和我第一次选了保存10天就不是一个意思啊?

还是说第一次勾选了,后面再次登录,这个勾选默认还是有的。但是如果有,那不是从当前时间开始再次保存10天?那就是一直保存下去了,和我只想保存10天还是不一样?

 

所以这个到底什么意思???

 

 勾选按钮isUseCookie:

 <tr>
           <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked"/>十天内记住我的登录状态</td>
 </tr>

 

这里设置这个选择的时候,默认就是勾选了的(上面的页面里可以看出是勾选了的)

(为什么,这里也没有设置值的地方啊,为什么就默认是勾选?)

   难道是  checked=“checked”??如果写成checked=“check”就是不勾选状态??

  修改代码结果check是未定义。。。难道所有的cookie默认都行勾选的?

 

去查了  checkbox,是HTML里DOM的选择框对象。不过都是一个意思吧。

属性 描述 W3C disabled 设置或返回 checkbox 是否应被禁用。 Yes checked 设置或返回 checkbox 是否应被选中。 Yes defaultChecked 返回 checked 属性的默认值。 Yes form 返回对包含 checkbox 的表单的引用。 Yes name 设置或返回 checkbox 的名称。 Yes

看来是checked属性的值就只有“checked”。如果不写这个属性,那就默认是不勾选。如果写了就只有勾选一个值??

 

此时默认是选了的,如果以前登录并勾选保存了,那这里会直接调出以前的值。

但是如果调出以前的,那还是默认勾选了,那不是又重新算时间了?

一直都是按十天算,那只要十天内再次登录,就可以一直保存下去了。所以我不太明白这个地方?

 

这里是为了解决如果输入有中文的乱码问题

网友评论