session获取与存储

2023-11-19

方法一:


首先要明白:session是在服务器端创建并保存在服务器端,当代码中创建session时会相应地创建sessionID保存在服务器端,同时服务器向浏览器响应信息时会以cookie形式 (其实就是“JSESSION:sessionID”的键值对)返回并保存到浏览器本地中。一旦当前浏览器的进程要取服务器对应的保存在session的信息时候,就会取出刚才保存在cookie中对应的sessionID和服务器端的sessionID进行对比,相同就能取出你想要的信息,不能就不能取出。


好了,明白这一点后,我们就可以即使浏览器禁止了cookie也能用session。因为在一般情况下(即没禁时候),我们不需把sessionID保存到cookie中,因为一般情况下浏览器会自动的;然而当禁止时候,就需要我们主动的把sessionID写入到cookie中。那么问题就解决了。



主动把sessionID写到cookie中

[java]  view plain  copy
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  2.         throws ServletException, IOException {  
  3.   
  4.     response.setContentType("text/html;charset=utf-8");  
  5.     PrintWriter out = response.getWriter();  
  6.     //先用一次Session,就会自动创建Session的id  
  7.     HttpSession session=request.getSession();  
  8.     session.setAttribute("mess","你关闭了浏览器我还是给你看到session");  
  9.     //自己把SessionID保存在cookie中  
  10.     Cookie cookie=new Cookie("JSESSIONID", session.getId());  
  11.     //设置cookie保存时间  
  12.     cookie.setMaxAge(60*20);  
  13.     //被创建的cookie返回浏览器  
  14.     response.addCookie(cookie);  
  15.     out.println("添加Session成功!");  
  16. }  


直接取就可以了:

[java]  view plain  copy
  1. String mess=(String)request.getSession().getAttribute("mess");  
  2. out.println(mess);  



方法二:


不用保存SessionID到cookie中,而是动态地把当前用户的SessionID添加到程序的各超链接或转发地址中,那么就可以确保用户的唯一。response.encodeRedirectURL(url)是一个进行URL重写的方法, 使用这个方法的作用是为了在原来的url后面追加上Jsessionid 。 目的是保证即使在客户端浏览器禁止了cookie的情况下,服务器端仍然能够对其进行事务跟踪。


例如这样:

功能:物品加入购物车后,点击返回主页面,主页面显示刚才加入到购物车的物品,当然了,这里是考虑浏览器禁止cookie情况下。

[java]  view plain  copy
  1. //动态改写URL  
  2. String url = response.encodeRedirectURL("/UserManager/BuyBookCL");  
  3. PrintWriter.println("<a href='"+url+"'>加入购物车</a>");  
  4. //在返回时也要加入 URL地址重写  
  5. String url = response.encodeRedirectURL("/UserManager/home");  
  6. PrintWriter.println("<a href='"+url+"'>返回主页面</a><br/>");  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

session获取与存储 的相关文章

随机推荐

  • 《算法导论》笔记(15) 最小生成树 部分习题

    习题23 1 11 给定图G和一棵最小生成树T 假设减少了位于T之外的某条边的权重 因为T内的边 是连接所有结点的权重最小的 那么首先将T外的减少权重的边 u v 加入T 然后在u v中寻找所有的路径 去掉路径中权重最大的边 习题23 2
  • 5、H3C交换机ACL配置

    创建 IPv4 高级 ACL 并进入 IPv4 高级 ACL 视图 switch acl number acl number name acl name 注 IPv4 高级 ACL 的编号范围为3000 3999 创建规则 switch a
  • 无法打开计算机开始菜单,开始菜单,教您开始菜单无法打开

    win10系统开始菜单不能使用该如何是好呢 最近有位用户反映在使用win10系统的过程当中 发现开始菜单没莫名其妙的就出现了打不开的情况 这该怎么办呢 不要着急 小编这就来将处理开始菜单打不开这个问题的办法来分享给你们 我们在使用电脑的过程
  • 使用Docker Compose搭建Redis主从集群

    一 本次环境使用到了docker docker compose redis 二 我们搭建的主从集群结构如图 共包含三个节点 一个主节点 两个从节点 这里我们会在同一台虚拟机中开启3个redis实例 模拟主从集群 信息如下 IP PORT 角
  • 超越nnFormer!UNETR++:高效准确的3D医学图像分割

    UNETR Delving into Efficient and Accurate 3D Medical Image Segmentation 论文链接 https arxiv org abs 2212 04497 代码链接 https g
  • Spring Boot 配置文件这样加密,才足够安全!

    1 前景 在使用Springboot时 通常很多信息都是在application yml中直接明文配置的 比如数据库链接信息 redis链接信息等等 但是这样是不安全的 所以需要对敏感数据进行加密 这样防止密码泄露 Jasypt这个库为我们
  • Go开发命令行程序指南

    近期在Twitter上看到一个名为 Command Line Interface Guidelines 的站点 1 这个站点汇聚了帮助大家编写出更好命令行程序的哲学与指南 这份指南基于传统的Unix编程原则 2 又结合现代的情况进行了 与时
  • 封装的几种形式

    你说的时cpu的封装吗 供你参考 集成电路芯片的封装形式 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来 在20多年时间内 CPU从Intel4004 80286 80386 80486发展到Pentium和Pentium
  • 基于Jenkins实现Docker应用的持续集成与部署

    先决条件 1 服务器部署安装有docker 在docker应用开发中最常见的就是开发Dockerfile文件 可以使用代码仓库来管理它 而在企业私有开发环境中是无法访问公有代码仓库 如Github 的 这时可以搭建私有代码仓库 部署安装sv
  • 堆排序专题-把一个数组变成大根堆的两种方式和根据大根堆来实现对数组的排序,

    什么是堆排序 堆排序 Heap Sort 是一种基于二叉堆数据结构的排序算法 它的基本思想是将待排序的数组构建成一个大根堆或小根堆 然后依次将堆顶元素与堆尾元素交换 并重新调整堆 直到整个数组有序 堆排序的时间复杂度为O nlogn 是一种
  • python无人机路径规划算法_RRT算法在Python中的实现,快速,拓展,随机,树

    基于智能优化与RRT算法的无人机任务规划方法研究 博士论文 基于改进人工势场法的路径规划算法研究 硕士论文 import matplotlib pyplot as plt import random import math import c
  • STM32基于GPRS模组使用HTTP协议单片机固件在线升级(IAP)

    一 前言 最近有朋友让我帮忙开发基于GPRS模组的单片机固件在线升级 这样的远程升级就两种方式 1 自己定义协议 服务器端进行bin文件拆包 一包包下发 优点 可以每包一校验还可以断点续传 不需要考虑Flash学入占用的时间 缺点 需要服务
  • https网络编程——如何利用中继证书(凭证)建立客户端证书

    参考 如何利用中继证书 凭证 建立客户端证书 地址 https qingmu blog csdn net article details 108226592 spm 1001 2014 3001 5502 目录 建立客户端证书的前提是要建立
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • vscode 中使用鼠标Ctrl+滚轮放大缩小

    1 使用鼠标Ctrl 滚轮放大缩小 打开 文件 gt 首选项 gt 设置 gt 用户 gt 下面的JSON 2 3 点击在settings json中编辑 4 添加下面一行 editor mouseWheelZoom true 5 最后保存
  • MachineLearningWu_15/P70-P71_AdamAndConv

    x 1 算法参数更新 我们使用梯度下降算法来自动更新参数 但是由于学习率的不好选择性 我们有时候会下降地很快 有时候下降地很慢 我们期望有一种方式能够自动调整学习率的变化 这里引入Adaptive Moment Estimation Ada
  • eclipse汉化方式(下载,安装,中英切换)

    按照下面的步骤完成Eclipse的汉化 对初学java的小伙伴们很有帮助哦 愿大家能够学习进步 eclipse汉化的两种方式 第一种方式 第二种方式 第一种方式 一 第一步准备工作 打开eclipse点击Help About eclipse
  • Unity 3D input.GetAxis用法

    input GetAxis 用法 GetAxis Mouse X GetAxis Mouse Y GetAxis Mouse ScrollWheel GetAxis Vertical GetAxis Horizontal GetAxis 是
  • 深度特征融合---高低层(多尺度)特征融合

    目录 概述 基本概念 典型方法概述 相关工作 多尺度模型设计 Deep Feature Fusion for VHR 高分辨率图像 Remote Sensing Scene Classification DCA特征融合方法 基于神经网络的目
  • session获取与存储

    方法一 首先要明白 session是在服务器端创建并保存在服务器端 当代码中创建session时会相应地创建sessionID保存在服务器端 同时服务器向浏览器响应信息时会以cookie形式 其实就是 JSESSION sessionID