【note】【javaweb】day10cookie&session

一、会话概述

1、什么是会话?如同打电话

2、会话过程要解决的问题是什么?

保持各个客户端自己的数据。

二、Cookie

由于Cookie数据是由客户端来保存和携带的,所以称之为客户端技术

1、属性:

  1. name:名称不能唯一确定一个Cookie。路径可能不同。
  2. value:不能存中文。
  3. path:默认值是写Cookie的那个程序的访问路径
    1. 比如:http://localhost:8080/day10_00_cookie/servlet/ck1写的Cookie
      1. path就是:/day10_00_cookie/servlet 看当前创建cookie的资源(servlet)文件路径
      2. 客户端在访问服务器另外资源时,根据访问的路径来决定是否带着Cookie到服务器
      3. 当前访问的路径如果是以cookiepath开头的路径,浏览器就带。否则不带。

 

  1. maxAge:cookie的缓存时间。默认是-1(默认存在浏览器的内存中)。单位是秒。
    1. 负数:cookie的数据存在浏览器缓存中
    2. 0:删除。路径要保持一致,否则可能删错人。
    3. 正数:缓存(持久化到磁盘上)的时间

   getMaxAge() : 返回以秒为单位指定的cookie的最大生成时间。默认情况下,-1指示该cookie将保留到浏览器关闭为止。

   setMaxAge() : 设置cookie的最大生存时间。

正值表示cookie将在经过该值表示的秒数之后过期。该值表示cookie过期的最大生存时间,不是cookie当前的生存时间。

负值意味着cookie不会被持久存储,将在web浏览器退出时删除。0值会导致删除cookie。

 

创建cookie

删除cookie

注意:要设置被删除cookie的path,只根据名字可能会删错对象

  • HttpSession
  • 一个浏览器独占一个session对象。

Session与cookie的区别:

  1. cookie是把用户的数据写给用户的浏览器
  2. Session是把用户的数据写到用户独占的session中
  3. Session对象由服务器创建,开发人员可以调用request对象的getSession方法的得到session方法

Session 的id 存在cookie中,根据id读取session,没有则创建

1、为什么要学HttpSession?

> 它也是一个域对象: session   servletContext  request

> 同一个会话下,可以使一个应用的多个资源共享数据

   一个窗口打开多个链接可以共享

***> cookie客户端技术,只能存字符串。HttpSession服务器端的技术,它可以存对象

Sessiom依赖cookie

2、常用方法

把数据保存在HttpSession对象中,该对象也是一个域对象。

void setAttribute(String name,Object value);

Object getAttribute(String name);

void removeAttribute(String name);

HttpSession.getId():

 

setMaxInactiveInterval(int interval)  设置session的存活时间,以秒为单位

invalidate() 使此会话无效

实际开发中保存用户登陆信息就是存到session中,如果没有session则说明用户没有登陆。

达到设置的有效时间过期后,会提示重新登陆,此时session销毁。

 

3、getSession():内部执行原理

HttpSession request.getSession():内部执行原理

1、获取名称为JSESSIONID的cookie的值。

2、没有这样的cookie,创建一个新的HttpSession对象,分配一个唯一的SessionID,并且向客户端写了一个名字为JSESSIONID=sessionID的cookie

3、有这样的Cookie,获取cookie的值(即HttpSession对象的值),从服务器的内存中根据ID找那个HttpSession对象:

找到了:取出继续为你服务。

找不到:从2开始。

 

 

HttpSession request.getSession(boolean create):

参数:

true:和getSession()功能一样。

false:根据客户端JSESSIONID的cookie的值,找对应的HttpSession对象,找不到返回null(不会创建新的,只是查询)。

session状态:

注释:

serializable可序列化,如写的book类:class book implements serializable,服务器重启时可以保存session数据。

可序列化称为活化;不可序列化成为钝化。

 

 

3、客户端禁用Cookie后的会话数据保存问题

Session依赖cookie,

客户端禁用cookie:浏览器永远不会向服务器发送cookie的请求消息头

 

解决方案:

方案一:在主页上给出提示:请不要禁用您的cookie

方案二:URL重写。必须对网站的所有地址都重写。

 

http://url    -重写为-->  http://url;JSESSIONID=111

 

语法:

response.encodeURL(String url);

看浏览器有没有发送cookie请求消息头,没有就重写URL,有就不重写。

 

request.getSession();必须写

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb 中,可以使用 Cookie 来跟踪用户的 Session 信息。 首先,在服务器端创建一个 Session 对象,可以使用以下代码: ```java HttpSession session = request.getSession(true); ``` 这个方法会检查请求中是否包含了一个 Session ID,如果没有,就会创建一个新的 Session 对象,并返回一个包含 Session ID 的 Cookie。如果已经存在 Session ID,就会返回对应的 Session 对象。 接下来,我们可以将需要保存的数据存储在 Session 对象中: ```java session.setAttribute("username", "John"); ``` 这里将一个名为 username 的属性设置为 John。 最后,将 Session ID 返回给客户端,可以使用以下代码: ```java Cookie cookie = new Cookie("sessionId", session.getId()); response.addCookie(cookie); ``` 这里创建一个名为 sessionId 的 Cookie,并将 Session ID 设置为其值,最后将 Cookie 添加到响应中。 当客户端发送请求时,服务器会读取 Cookie 中的 Session ID,然后从服务器的 Session 中获取对应的数据。可以使用以下代码来读取 Session 中的数据: ```java HttpSession session = request.getSession(false); String username = (String) session.getAttribute("username"); ``` 这里将获取名为 username 的属性的值,如果 Session 不存在,就返回 null。 注意,将敏感数据保存在 Cookie 中是不安全的,因为 Cookie 可以被窃取或篡改。因此,建议对敏感数据进行加密或使用其他更安全的方式进行保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值