Session学习笔记-阿里云开发者社区

开发者社区> codingcoge> 正文

Session学习笔记

简介:
+关注继续查看

Session技术: 服务器能够识别不同的浏览者。

Session一般都是用来保存登陆信息的,跟Cookie不同的是:  
Cookie是保存在浏览器中 而Session是保存在服务器中。  
而且 Session是发送一个Cookie来唯一标识一个浏览器的   
(同一个浏览器打开不同窗体也算 但是 关闭后就不算了)

主要技术:

request.getSession();
setAttrbute("name","会话数据");
getAttribute("会话数据")
java.lang.String getId()  : 得到session编号
2)两个getSession方法:
getSession(true) / getSession()  : 创建或得到session对象。没有匹配的session编号,自动创建新的session对象。
getSession(false):    得到session对象。没有匹配的session编号,返回null
3)void setMaxInactiveInterval(int interval)  : 设置session的有效时间

4)void invalidate()     : 手动销毁session对象

session对象销毁时间:

默认情况30分服务器自动回收
修改session回收时间
全局修改session有效时间
<!-- 修改session全局有效时间:分钟 -->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题

手动发送一个硬盘保存的cookie给浏览器

Cookie c = new Cookie("JSESSIONID",session.getId());
       c.setMaxAge(60*60);
       response.addCookie(c);

举一个 栗子 使用Session保存登陆这信息(不同浏览器或者不同时间段打开的同一浏览器可以有不同信息)
这里写图片描述

首先需要登陆页面 和登陆失败后返回的页面:
登陆:


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/hha/xx" method="POST">
    <input type="text" name="name" />
    <input type="text" name="password" />
    <input type="submit" value="点我" />
</form>
</body>
</html>

失败:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
失败
<a href="/hha/One.html">fanhui</a>
</body>
</html>

后台验证信息:

      
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");
        String password=request.getParameter("password");
        if("jjc".equals(password)) {
            HttpSession session=request.getSession();
            session.setAttribute("name", name);
            response.sendRedirect(request.getContextPath()+"/yy");
        }else {
            response.sendRedirect(request.getContextPath()+"/Two.html");
        }
    }

跳转到对应的欢迎部分:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter printWriter=response.getWriter();
        String html="";
        HttpSession session=request.getSession(false);
        if(session==null) {
            response.sendRedirect(request.getContextPath()+"/One.html");
            return;
        }
        String name=(String) session.getAttribute("name");
        if(name==null) {
            response.sendRedirect(request.getContextPath()+"/One.html");
            return;
        }
        html+="name:"+name+",<a href='"+request.getContextPath()+"/One.html'>fanhui</a>";
        printWriter.write(html);
    }

清空保存的属性,而不是session:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session=request.getSession(false);
        if(session==null) {
            response.sendRedirect(request.getContextPath()+"/One.html");
        }
        session.removeAttribute("name");
    }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Boost asio 心得笔记
Boost asio中有两点用的不爽: 1. asio中的所有对象都引用io_service 2. async_write还要自己保证内存在completed之前有效   有空要把这两点搞的更傻瓜一点,实际上在全异步模式下NET IO分配两个线程足矣,async搞一个队列,completed时候删掉,还可以通过writev优化写, 现在在做的一个redrabbit lib 就是在boost asio上封装的更傻瓜一点。
872 0
UNIX环境高级编程笔记之高级I/O
  本章说明了很多高级I/O功能: 非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制 I/O多路转接——select和poll函数 readv和writev函数,以及存储映射I/O(mmap函数)
700 0
iOS Quartz 2D相关笔记总结笔记 韩俊强的博客
一、基本理论和基本代码 概念总结 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统。Quartz 2D能完成的工作:绘制图形 : 线条,三角形,矩形,圆,弧等;绘制文字绘制,生成图片(图像)读取,生成PDF截图,裁剪图片自定义UI控件等Quartz2D提供了以下几种类型的Gra...
701 0
UNIX环境高级编程笔记之标准I/O库
一、总结   文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的。不带缓冲的I/O通过文件描述符的方式来引用一个文件,而带缓冲的I/O则通过文件流(stream)的方式来引用文件。
675 0
PostGIS学习笔记(开篇)
PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。刚好最近又遇上一个问题,也使我萌发了开坑PostGIS的想法。
1548 0
iOS开发笔记 3、iOS基础
系统规格 iPhone的规格 Each is a 4.7- or 4.8-ounce computing device. Each contains a 620 MHz ARM CPU that has been underclocked to improve battery performance and reduce heat.
812 0
+关注
codingcoge
种一棵树最好的时间是十年前,其次是现在。 java自学后台ing,请多指教 Github: https://github.com/jjc123
181
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载