状态管理---session

session (会话)

(1)什么是session?
- 服务器端为了保存用户状态而创建的一个特殊的对象

(2)session工作原理
- 当浏览器访问服务器的时候,服务器创建`session`对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以Cookie的set-Cookie方式发送给浏览器.当浏览器再次访问服务器的时候会将sessionId发送过来,服务器可以使用该sessionId,依据该sessionId找到对应的session对象
    
(3)如何获得session对象
- 方式一

 HttpSession session = request.getSession(Boolean flag);

 说明:
            HttpSession是一个接口,session对象是一个符合该接口的对象.
        (1)当flag == true时
            先查看请求当中有没有sessionId,如果没有则创建一个session对象;如果有sessionId,则依据该sessionId查找对应的sessionId对象,如果找到了,则返回该session,如果找不到,则创建这个session对象并返回.




        详细细节:
        


        (2)当flag == false时
            先查看请求当中有没有sessionId,如果没有,返回null,如果有sessionId,则依据该sessionId查找session对象,如果找到了,则返回session对象,如果找不到则返回null.

- 方式二

 HttpSession session = request.getSession();//等价于request.getSession(true);

(4)session常用方法
- 绑定数据的方法

    setAttribute(String name , Object obj);
    getAttribute(String name);//依据绑定名查找数据,如果找不到返回null
    removeAttribute(String name);//删除
    String getId();//获取sessionId

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

    注:一般服务器缺省的超时时间长度一般是30分钟

- 超时时间修改
    - 1: 修改web.xml文件中的配置(servers-->web.xml)

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

 也可将该段代码添加到当前应用的web.xml中



    - 2: session.setMaxInactiveInterval(int interval);//设置最大时间间隔s

            两次请求之间的最大间隔不能超过这个时间

(6)删除session
- session.invalidate() 失效(删除)

(7)session验证(day07-lab)
- step1:在登录成功之后,绑定一些数据到session对象上.比如

  session.setAttribute("user",user);


- step2:当用户访问需要保护的资源时(只有登录成功之后次啊能访问的资源),比访问success.jsp,进行session验证.
 

Object user = session.getAttrite("user");
if(user == null ){
     //没有登录,重定向到登录页面
      response.sendRedirect("login.jsp");
}


(8)比较session和cookie
- session相对于cookie,优点是更安全,能存放更多的数据,支持更丰富的数据类型,    但是session会u占用服务器端的内存空间,如果用户量更大,会占用大量的内存空间(cookie不占用服务端的资源),session需要服务器端同步.

 路径问题
- 指的是链接,表单提交,重定向,和转发时,如何填写路径.
- `<a href="">`
- `<form action="">`
- `response.sendRedirect("")`
- `request.getRequestDispatcher("")`

(1) 相对路径
- 不已"/"开头的路径就时相对路径

(2) 绝对路径
- 以"/"开头的路径就是绝对路径

(3) 如何写绝对路径
- 链接,表单提交,重定向:从应用名开始写
- 转发:从应用名之后开始写

    注:一定不要将应用名写在路径里面,使用:`request.getContenxtPath()`获取实际部署时的应用名,该方法返回的应用名前面加了"/"

IE禁用Cookie后的session处理
- 解决方案:URL重写
    - response. encodeRedirectURL(java.lang.String url) 
        - 用于对sendRedirect方法后的url地址进行重写。
    - response. encodeURL(java.lang.String url)
        - 用于对表单action和超链接的url地址进行重写 
- 附加:
    - Session的失效  invalidate()立刻实效
    - Web.xml文件配置session失效时间
 
Cookie和Session的区别
1、Cookie将会话中产生数据保存在客户端, 是客户端的技术

2、session将会话中产生的数据保存在服务器端, 是服务器端的技术

3、Cookie将会话中产生的数据保存在客户端, 容易随着用户的操作而丢失或者被窃取. 因此Cookie适合存储对安全性要求不高, 但是要求存储时间比较长的数据

4、session是将会话中产生的数据保存在服务器端, 虽然不容易随着用户的操作而丢失. 但是在服务器中会占用服务器的空间, 因此session适合存储要求时间不长, 但是要求安全性比较高的数据.

5、Cookie的应用场景: 比如: 在网页中显示上次访问时间、记住用户名、实现购物车

6、Session的应用场景:保存用户的登录状态、实现购物车               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值