JavaWeb学习——session总结
一、session简介
sesion也就是会话,Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
需要注意:一个浏览器独占一个session对象(默认情况下),且会话状态仅在支持cookie的浏览器中保留。当浏览器关闭后,代表本次会话结束。一次会话是浏览器与服务器通讯开始至浏览器关闭。
二、Session和Cookie的区别
- Cookie是把用户的数据写给用户的浏览器。
- Session技术把用户的数据写到用户独占的session中。
- Session对象由服务器创建,存放的是对象(Object);而cookie是以键值对的形式存放数据。
三、session实现原理
第一次请求时,会响应一个cookie,名称是jsessionid,值是一串32位组成标识符。当闭关本次会话时,开始下次会话,那么32位标识符会发生改变,即认为不是同一次会话,session对象默认是30分钟后销毁。代码如下:
package com.session.controller; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class sessionController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8"); //使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = req.getSession();
//将数据存储到session中
session.setAttribute("data", "00000");
//获取session的id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
resp.getWriter().print("sesion创建成功,session的id="+ sessionId);
}else {
resp.getWriter().print("session已存在!id是"+ sessionId);
}
}
第一次访问创建一个新的session

不关闭浏览器再访问

发现还是同一个session
可猜想request.getSession()方法内部新创建了Session之后一定是做了如下的处理

1 //获取session的Id
2 String sessionId = session.getId();
3 //将session的Id存储到名字为JSESSIONID的cookie中
4 Cookie cookie = new Cookie("JSESSIONID", sessionId);
5 //设置cookie的有效路径
6 cookie.setPath(request.getContextPath());
7 response.addCookie(cookie);

五、session对象的销毁
session对象默认30分钟没有使用,则服务器会自动销毁session
5.1 在web.xml文件中可以手工配置session的失效时间,例如:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>webdemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>sessionController</servlet-name>
<servlet-class>com.session.controller.sessionController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sessionController</servlet-name>
<url-pattern>/session</url-pattern>
</servlet-mapping> <!-- 设置Session的有效时间:以分钟为单位-->
<session-config>
<session-timeout>15</session-timeout>
</session-config> </web-app>
5.2 在程序中手动设置Session失效时间
可以在创建session之后,调用session.getMaxInactiveInterval();方法,设置session生效时间。
参数以秒为单位,例如,一天就是session.getMaxInactiveInterval(1*60*60*24);
六、常用api
getSession() 创建session对象,用requst对象调用,参数:true:自动创建,false:不创建
- session.getId() 获取session的id
session.setMaxInactiveInterval(1*60*60) 设置session自动销毁时间,以秒为单位,这里是1小时
session.setAttribute("session", "12345678"); 往session域存储数据,object类型
- session.getAttribute("session"); 取数据,取出是object类型
session.removeAttribute(“session”); 删除session域中指定的数据
还可以在request域或servletContext域中存取删session,函数名都一样。
JavaWeb学习——session总结的更多相关文章
- javaWeb学习-----session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- javaweb学习——session和Cookie实现购物车功能
1.创建Book类,实现对图书信息的封装. package cn.it.sessionDemo.example1; import java.io.Serializable; /** * 该类实现对图书 ...
- (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb学习----JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- JavaWeb学习总结(转载)
JavaWeb学习总结(五十三)--Web应用中使用JavaMail发送邮件 JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 JavaWeb学习总结(五十 ...
- 转载-JavaWeb学习总结
JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件 孤傲苍狼 2015-01-12 23:51 阅读:13407 评论:20 JavaWeb学习总结(五十二)——使用 ...
- javaweb学习5——JSP
声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转 本文链接:https://www.cnblogs.com/xdp- ...
随机推荐
- Add JWT Bearer Authorization to Swagger and ASP.NET Core
Add JWT Bearer Authorization to Swagger and ASP.NET Core If you have an ASP.NET Core web applica ...
- basename函数不能获取url路径中文文件名的问题
basename basename() 函数返回路径中的文件名部分. 语法 basename(path,suffix) 参数 描述 path 必需.规定要检查的路径. suffix 可选.规定文件扩展 ...
- 垃圾回收器及tomcat调优
垃圾回收机制 1.概述:垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域".垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存 ...
- MySQL 保存镜像实战操作( 拷贝方法 )
查看数据保存的位置 docker inspect --format='{{.Mounts}}' mxg_mysql 容器路径为:`/var/lib/mysql` ,宿主机数据保存在: /var/lib ...
- python连接mariadb报错解决1045, "Access denied for user 'root'@'192.168.0.50' (using password: YES)
[root@localhost ~]# python Python 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Ha ...
- layui隐藏表格列
根据需求我们需要展示某些数据,但有的时候这些数据又不该展示出来,比如不同角色看到不同数据,这个时候就会需要隐藏些数据了 我们需要在表格完成的回调进行处理 done: function (res, cu ...
- netcore中使用session
- 脚本_查看所有虚拟机磁盘以及 CPU 的使用量
#!bin/bash#作者:liusingbon#功能:查看所有虚拟机磁盘使用量以及 CPU 使用量信息read -p "按任意键进入查看页面.比如按下Enter键" keyvir ...
- 使用C#解析XMIND文件格式
static void Main(string[] args) { var tempPath = @"c:\Temp"; if (Directory.Exists(tempPath ...
- VPS Linux修改root密码
hosteons VPS 没有提供在网页控制面板里修改root密码的选项,但是可以通过Rescue模式吃查看root密码以及 有重置root密码为随机值的选项. 在重置root密码为随机值后,进入系统 ...