头条项目收获01

一、第一阶段是完成注册登录功能。
注册我是利用邮箱注册完成的。
注:关于邮箱注册和手机注册在我另一篇文章中有专门demo介绍。
这个阶段遇到的问题主要是如何保存用户登录信息,也就是状态管理——如何合理使用session和cookie。
二、cookie
1.什么是cookie
服务器临时存放在浏览器端的少量数据,用于跟踪用户状态。
2.cookie的工作原理
当浏览器访问服务器时,服务器会将少量数据以set-cookie消息头形式发送给浏览器,浏览器会保存下来;
当浏览器再次访问服务器时,会将之前保存的这些数据以cookie消息头的形式发送给服务器。
3.如何添加和获取cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);

Cookie[] cookies = request.getCookies();(有可能返回null)
String name = cookie.getName();
String value = cookie.getValue();
4.生存时间
1)默认情况下,cookie保存在内存中,浏览器关闭,cookie就被删除。
2)可以调用cookie.setMaxAge(int seconds);
注:
    单位是秒。 365 * 24 * 60 * 60
    seconds > 0: 浏览器会将cookie保存在硬盘上(一般是文件的形式),
                超过指定的时间,cookie会被删除。
    seconds < 0: 默认情况(即保存在内存里面)。
    seconds = 0: 删除cookie。
        比如,要删除一个名称为username的cookie:
        Cookie c = new Cookie("username","");
        c.setMaxAge(0);
        response.addCookie(c);
5.编码问题
1).cookie只能保存合法的ascii字符,如果是中文,需要转换成对应的ascii字符的形式。
2).可以使用以下方法进行处理
    String URLEncoder.encode(String str,String charset);
    String URLDecoder.decode(String str,String charset);
3).建议,在添加cookie时,不管是否为中文,统一进行编码处理。
6.路径问题
1).什么是cookie的路径问题?
    浏览器访问服务器上的某个地址时,会比较该地址是否符合cookie的路径要求,只有符合条件cookie才会被发送。
2).Cookie的默认路径
    默认路径等于添加该cookie的web组件的路径。
    比如,/day06/biz01/addCookie.jsp添加了一个cookie,则该cookie默认的路径是"/day06/biz01"。
3).哪一些cookie会被发送?
    请求地址等于cookie的路径或者是其子路径,则该cookie会被发送。
    比如,cookie的路径是"/day06/biz01",则
    "/day06/findCookie1.jsp", 不会被发送;
    "/day06/biz01/findCookie2.jsp",会被发送;
    "/day06/biz01/sub/findCookie3.jsp",会被发送。
4).修改路径
    cookie.setPath(String path);
7.cookie的限制
1).Cookie可以被用户限制
2).不安全
3).保存的数据大小有限制,一般4KB
4).保存的数量也有限制,一般几百个
5).只能存放字符串

三、session
1.什么是session
服务器为了保存用户对象而创建的特殊对象。
2.工作原理
浏览器访问服务器时,服务器创建一个特殊的对象(即session对象,该对象
有一个唯一的id,一般称之为sessionId),服务器将sessionId以cookie的方式发送给浏览器。
当浏览器再次访问服务器,会将sessionId发送过来,服务器依据sessionId就可以找到对应的session对象。
3.如何获得session
HttpSession s = request.getSession(boolean flag);

注:
    HttpSession是一个接口,request.getSession方法会返回一个
    实现了该接口的对象,该对象我们称之为session对象。
    当flag为true时:
        先查看请求当中是否有sessionId,如果没有,则创建一个
        session对象;如果有sessionId,则依据该sessionId查找
        对应的session对象,如果找到了,则返回该对象,找不到,
        则创建一个新的session对象。
    当flag为false时:
        先查看请求当中是否有sessionId,如果没有,返回null;
        如果有sessionId,则依据该sessionId查找
        对应的session对象,如果找到了,则返回该对象,找不到,
        返回null。
    HttpSession s = request.getSession(boolean flag) 等价于 request.getSession(true)
4.session对象的常用方法
    1).获得sessionId
    String session.getId(); 

    2).绑订数据
    session.setAttribute(String name,Object obj);

    3).依据绑订名获得绑订值
    Object session.getAttribute(String name);

    注:如果绑订名对应的值不存在,返回null。

    4).解除绑订
    session.removeAttribute(String name);
    虽然服务器会自动绑定sessionID到浏览器cookie,但是我们也可以自己绑定,
    Cookie cookie = new Cookie("JSESSIONID", session.getId());

5.session超时
服务器会将空闲时间过长的session对象删除掉。

注:
    为了节省内存空间。
    服务器默认的超时时长一般是30分钟。

6.修改session超时时间
方式一 修改服务器的配置文件

 <session-config>
    <session-timeout>30</session-timeout>
 </session-config>

方式二 编程的方式

session.setMaxInactiveInterval(int seconds);

注:
    设置两次请求之间的最大间隔时间。如果超过这个间隔时间,
    session对象会被删除。

7.删除session
session.invalidate();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值