会话技术cookie与session
会话技术cookie
会话技术
什么是会话
- 用户开一个浏览器
- 点击多个超链接,访问服务器多个web资源
- 然后关闭浏览器,整个过程称之为一个会话。
- 和打电话一样,电话接收,开始会话,电话 挂断,结束会话
会话技术解决什么问题
- 保持各个客户端自己的数据
- 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据
cookie
服务器怎样把Cookie写 给客户端
创建Cookie
- Cookie cookie = new Cookie(String cookieName,String cookieValue);
- cookie会以响应头的形式发送给客户端
- Cookie只能存储非中文的字符串
向客户端发送cookie
response.addCookie(cookie名称)
访问
- 第一次访问时, 请求头当中没有cookie, 响应当中会看到set-cookie
- 再一次访问时, 请求头当中就能够看到cookie信息
- 访问服务器的任何资源,一般情况下都会把cookie带去过
Cookie默认存储时间
默认cookie的会话级别
- 打开浏览器,关闭浏览器为一次会话
- 如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭,cookie信息销毁
设置Cookie在客户端的存储时间
- cookie.setMaxAge(int seconds);
- 设置的时间为秒
- 如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里
- 过期会自动删除
设置Cookie的携带路径
访问某一个资源时,要不要带cookie信息。资源携带太多,会影响传输速度
如果不设置携带路径
默认情况下会在访问创建cookie的web资源相同的路径,都携带cookie信息
在myxq/CookieServlet下创建的cookie
在myxq/下的index.jsp访问时会携带cookie
不是在myxq下,不会携带cookie
设置携带路径
cookie.setPath(String path);
- cookie.setPath(“/CookiePro/cookieServlet”);只有访问cookieServlet才携带cookie信息
- cookie.setPath(“/CookiePro”);访问指定的工程时, 都会携带cookie信息
- cookie.setPath(“/”);访问服务器下部署的所有工程时都会携带cookie
删除Cookie
- 如果想删除客户端的已经存储的cookie信息
- 使用同名同路径的持久化时间为0的cookie进行覆盖即可
服务器如何获取客户端携带的cookie
- 通过Request对象的getCookies()方法
- 获取的是所有的cookie
- 要进行遍历,找出自己名称的那一个
应用:记录上次登录时间
需求
访问时,显示上次的登录时间
步骤
1.第一次访问时,获取当前的时间,并把它写到cookie当中,响应给浏览器
2.第一次访问,告诉用户是第一次访问
3.用户下次访问时,获取用户携带的cookie,把日期在浏览器当中显示,记录最新的cookie
session
session简介
- Session技术是将数据存储在服务器端的技术
- 会为每个客户端都创建一块内存空间存储客户的数据
- 客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间
- Session需要借助于Cookie存储客户的唯一性标识SESSIONID
Session如何办到在一个servlet当中存数据,
- 在别的servlet当中取出当初存储的数据
- 每一个用户访问服务器时,会给该用户分配他自己对应的存储空间
- 并且创建的存储空间有一个编号我们称为SessionID
- 第一次访问时, 会把对应的sessionID以Cookie的形式写给浏览器
- 下次再访问时, 会携带sessionID,找到当初创建的那个存储空间
- 在对应的存储空间当中取出数据
如何获取Session对象
HttpSession session = request.getSession();
获得专属于当前会话的Session对象
如果服务器端没有该会话的Session对象,会创建一个新的Session返回
如果已经有了属于该会话的Session直接将已有的Session返回
本质就是根据SESSIONID判断该客户端是否在服务器上已经存在session了
怎样向session当中存取数据
Session对象也是一个域对象
- session.setAttribute(String name,Object obj);
- session.getAttribute(String name);
- session.removeAttribute(String name);
session的生命周期
创建
第一次执行request.getSession()时创建
销毁
- 服务器关闭时
- session过期/失效(默认30分钟)
- 是从最后一次操作结束时计时
- 手动销毁
- session.invadate
- 浏览器关闭,session就销毁,这句话是不正确的
作用范围
默认在一次会话中,一次会话中任何资源公用一个session对象
JSessionID持久化
- 默认情况下,第一次获取session对象时, 会帮你创建一个session,可以获取该Session的ID
- 会自动的把id写到cookie当中,在cookie中Session的ID 下标是 JSessionID
存在的问题
- 第一次访问sevlet1时存储一些数据
- 在第二个servlet当中直接取数据,可以直接取到
- 把浏览器关闭
- 直接到第二个servlet当中取数据,发现取不到数据了
原因
- 因为访问的时候要求带着JSessionID.
- 由于默认情况下,存储cookie是会话级别的,关闭浏览器,就没有了。
- 所以再次打开浏览器,访问资源时,没有JSessionID. 就会创建一个新的session. 就取不到数据了
解决办法
- 在写数据时,自己手动去把sessionID写到cookie当中
- 写的时候,设置持久化时间
- 注意,key值一定是和它自动生成的key值是一样的
会话技术cookie与session的更多相关文章
- Servlet 会话技术cookie和session
会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...
- 会话技术: Cookie 和 Session
会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保 ...
- Java EE会话技术Cookie和Session
会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...
- 会话技术cookie和session详解
什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...
- JAVA基础之会话技术-Cookie及Session
至此,学习Servlet三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会 ...
- Java web 会话技术 cookie与session
一.会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题 每个用户在使用浏览器与服务器进行会话的过程 ...
- Django2.2 会话技术cookie session token的区别以及实例介绍
一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...
- java ->会话技术Cookie&Session
会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...
- 会话技术 Cookie+Session
会话:这种在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开: 功能:在一次会话 ...
随机推荐
- Java 之 缓冲流
一.缓冲流概述 缓冲流,也叫高效流,是对四个 FileXXX 流的增强,所有也有四个流,按照类型分类: 字节缓冲流:BufferedInputStream,BufferedOutputStream 字 ...
- java基础点
1.eclipse什么时候编译java类文件 2.在同一包中的类可以相互引用,无需用import语句 3.在Java eclipse用ALT输入特殊符号 4.if else等语句,什么时候可以不加括号 ...
- centos7 配置yum源
简单粗暴方法: 1.首先在本机上测试 ping www.baidu.com 是否通,不通的话配置网卡ip.dns等. 2.进入yum路径下: cd /etc/yum.repos.d/ 3.下载repo ...
- WinServer-SMTP服务
摘要 SMTP服务是用来发送邮件的,常用于代码中发送邮件,不能接收.本章介绍SMTP服务的安装,配置. 搭建F5负载均衡集群注意事项: 1.集群不能与exchang在同网段,否则发不出邮件. 2.AP ...
- Windows设置多用户同时远程登录
1.在键盘上按Win+R键(也可以在开始菜单右键然后选择运行),在运行的输入框里面输入"gpedit.msc"命令.然后点击确定 2.在“计算机组策略”中依次展开 计算机配置- ...
- windows平台RSA密钥生成
1.安装openssl工具 下载安装openssl工具,执行安装目录bin下的"openssl.exe",执行后会弹出命令窗口. 2.生成私钥 在命令窗口输入“genrsa -ou ...
- rhel7.0替换centos yum源
1:卸载原先的yum 2:安装centos的yum 有以下的yum yum-utils-1.1.31-24.el7.noarch yum-langpacks-0.4.2-3.el7.noarch yu ...
- vscode源码编译疑难问题
最近把原来老的源码merge到了新的1.15版本源码,以前的依赖问题会导致各种错误,Loading "gc-signals" failed啦,Error: %1 is not a ...
- 如何在C中定义多行宏定义?
请参阅下面的示例,其中我将交换两个变量的值. do-while(0)结构很不错 #include <stdio.h> #define swap(x,y,T) do { \ T temp = ...
- sublime 不是插件安装越多越好,如xxxsnippet 自动完成插件太多,就非常耗电脑性能,经常性的卡着不动
sublime 不是插件安装越多越好,如xxxsnippet 自动完成插件太多,就非常耗电脑性能,经常性的卡着不动