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的选择框对象。不过都是一个意思吧。
看来是checked属性的值就只有“checked”。如果不写这个属性,那就默认是不勾选。如果写了就只有勾选一个值??
此时默认是选了的,如果以前登录并勾选保存了,那这里会直接调出以前的值。
但是如果调出以前的,那还是默认勾选了,那不是又重新算时间了?
一直都是按十天算,那只要十天内再次登录,就可以一直保存下去了。所以我不太明白这个地方?
这里是为了解决如果输入有中文的乱码问题