session会话机制:会话域

一、会话机制定义:

  1. 用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这个整个过程叫做一次会话。会话在服务器端也有一个对应的java对象,这个java对象叫做:session。
  2. 一个会话中包含多次请求。
  3. 在java的servlet规范当中,session对应的类名:HttpSession(jarkata.servlet.http.HttpSession)
  4. session对象最主要的作用是:保存会话状态。(用户登录成功了,这个是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。)
  5. request请求域(HttpServletRequest)请求级别的、session会话域(HttpSession)用户级别的、application应用域(ServletContext)项目级别的,所有用户数据共享
  6. 三种域的范围比较:request<session<application

二、session的实现原理:

在这里插入图片描述

  1. sessionID以cookie形式保存在浏览器内存中。
  2. 正常情况服务器创建session对象后发送cookie给浏览器,浏览器记住这个id用于获取session。
  3. cookie禁用后,服务器正常发送cookie给浏览器,但是浏览器不要了,拒收了。并不是服务器不发了。

三、设置session对象自动销毁时间:

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

四、session用法:

  1. 某些网页的内容需要用户登录后才能查看,为了防止用户不登录就查看网页内容(即直接输出要查看网页的URL),需要在用户的会话中加入session。只要用户不登录,就会被拦截在登录页面,后续页面也将无法查看。
    实现:
    (1)首先在登录成功的servlet代码中加入session.setAttribute("username",request.getParameter("username"));,给登陆成功的用户创建session对象。
    (2)然后把用户输入的信息添加到会话域中。
    (3)然后在后续页面的servlet中加入if语句,if(session != null && session.getAttribute("username") != null),如果用户没有创建session且session中的"username"为空,则response.sendRedirect(request.getContextPath()+"/index.jsp");重定向到登录界面。如果if为true,,则正常执行相关servlet代码。
  2. 用于用户点击退出登录按钮后清空cookie,提示用户需要重新登陆。
    实现:
    (1)获取session对象:HttpSession session = request.getSession(false);
    (2)判断session是否为空:if (session != null)
    (3)不为空销毁session:session.invalidate();//手动销毁session

五、访问JSP时会自动创建session:

因为JSP文件编译后的java代码中有一个变量就是session,即JSP会自动创建一个session,这个session会影响我们判断是否是用户登录成功后创建的session。
在这里插入图片描述

  • 解决方法:
    方法一:<%page session="false"%>这样访问JSP的时候JSP就不会自动创建session了。不建议用这种方式
    方法二:上述if语句中加入session.getAttribute("username") != null,因为JSP自动创建的session中是没有“username”这个属性的,这个属性是用户登录成功后才传进session会话域的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值