Session的实现原理
Session的实现方式有两种,一个是通过cookie,另一个是通过url重写。
1. 通过cookie
Cookie是保存在客户端的一小段信息,服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。
在MyEclipse环境下新建一个Web Project,命名为Test,在WebRoot下新建一个名为cookie的jsp页面,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>session实现原理</title>
</head>
<body>
<%
Cookie [] c = request.getCookies();
if(c==null){
out.println("sorry,cookie is null...");
}else{
for(int m =0;m<c.length;m++){
out.println(c[m].getName()+" "+c[m].getValue()+"<br>");
}
}
%>
</body>
</html>
打开浏览器,在地址栏中输入http://localhost:8080/Test/cookie.jsp,会输出"sorry,cookie is null...",表明在此次请求信息中没有cookie信息,但在这一过程中,服务器会自动生成一个session(因为session是jsp中的内置对象,如果在servlet中必须显示请求session,才会生成,即HttpSession session = request.getSession();)用以表示此次“会话”,同时将与该session相对应的sessionID以cookie的方式发送给客户端。当客户端再次请求该页面(应用程序)时,会自动将此cookie通过请求信息带到服务器端。因此,当你刷新上一次的请求时,页面会输出一个名为JSESSIONID的cookie,后面就是相应的cookie值,也就是本次“会话”的sessionID,
,当你再次刷新此页面时会得到相同的输出,因为在一次“会话”中,请求信息携带的sessionID与上一次响应的sessionID相一致。存放在客户端的用于保存sessionID的cookie会在浏览器关闭时清除,因此当你重新打开一个浏览器时,第一次的输出依然会是"sorry,cookie is null..."因为服务器认为这是一次新的“会话”,同样当你刷新此页面时,页面会输出一个名为JSESSIONID的cookie,但注意此时后面的cookie值与上一次肯定不相同,因为这是一次新的“会话”。
2. url重写
通过cookie可以很好地实现session,但是如果客户端由于某些原因(比如出于安全考虑)而禁用cookie,在这种情况之下,为了使session能够继续生效,可以采用url重写。url重写很简单,比如我要从1.jsp页面跳转到2.jsp,采用超链接的方式,可以用两种方式:一种如下所示:
<a href="2.jsp">2.jsp</a>
另一种是<a href="<%=response.encodeURL("2.jsp")%>">2.jsp</a>
其中第二种方式就是采用了url重写,在cookie没有被禁用的情况下,它与第一种情况没有什么区别,但在cookie禁用是,它会将SessionID的信息作为请求地址的一部分传到了服务器端,这就是URL重写的意义所在。
分享到:
相关推荐
在ASP.NET中,Session的实现主要依赖于以下几个核心组件: 1. **HttpSessionState**:这是ASP.NET中用于管理会话状态的对象,它存储和检索特定于用户会话的数据。每个用户的会话都有一个独立的SessionState实例,...
<title>session 实现原理 Cookie [] c = request.getCookies(); if(c==null){ out.println("sorry,cookie is null..."); }else{ for(int m =0;m;m++){ out.println(c[m].getName()+" "+c[m].getValue()...
以上就是使用JSP、Servlet和Session实现购物车功能的基本原理。在这个过程中,JSP和Servlet协同工作,Session起到了关键的会话管理作用,保证了用户在不同页面间操作的连贯性。在实际项目中,可能还需要结合数据库来...
Spring-Session 实现原理源码分析 Spring-Session 是 Spring旗下的一个项目,旨在解决 Session 管理问题。它可以轻松快捷地集成到我们的应用程序中,并提供了多种存储 Session 的方式。下面是 Spring-Session 的...
先说一下需求,我在做一个权限管理的时候,需要在点击某个模块时,Session中相应的改变模块代号,而实现这个操作的是一个a标签,当然我不知道 一个linkbutton是否可以同时将跳转页面和修改Session做了,个人感觉...
#### 二、Session的实现原理 ##### 2.1 Session的生命周期 - **创建**:当用户第一次访问应用时,如果没有找到对应的Session,则创建一个新的Session。 - **存储**:Session数据通常保存在服务器端,可以是内存中或...
### Session的工作原理与概念详解 #### 一、Session的基本概念 在计算机科学中,特别是网络编程领域,“**Session**”一词被广泛使用,并且在不同的上下文中具有不同的含义。通常,Session指的是客户端与服务器...
Springboot实现多服务器session共享 Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是...
在实际应用中,session常用于实现用户登录状态的保持,购物车功能,个性化推荐等。例如,当用户登录后,服务器会将用户信息存入session,后续请求中通过session ID就能识别用户身份,从而提供个性化的页面显示。对于...
接下来,我们将详细探讨Session的工作原理,如何利用Session实现用户登录,以及在购物车场景中的应用。 1. Session的工作原理: Session是基于HTTP协议无状态特性的一种补充机制。当用户访问服务器时,服务器会为...
本篇文章将深入探讨如何利用Redis实现Session共享,同时结合Nginx的负载均衡策略,以及Spring Boot的应用框架,构建一个高效、可靠的分布式系统。 一、Session共享的挑战与解决方案 在传统的单体应用中,Session...
本资源将介绍如何利用Session来实现一个购物车功能,特别地,这个购物车是通过链表结构来管理和维护商品信息。 购物车系统是电商网站的核心部分,它允许用户添加、删除和修改选购的商品。在ASP.NET中,由于HTTP协议...
本文将深入探讨SESSION购物车的概念、工作原理以及在实际应用中的重要性。 SESSION是一种服务器端存储用户状态的方法,当用户访问网站并登录或添加商品到购物车时,服务器会为该用户创建一个唯一的SESSION ID,并将...
本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 **一、Session概述** Session是HTTP协议无状态特性的补充,因为在HTTP协议中,每次请求都是独立的,服务器无法识别客户端的连续请求是否来自...
本文将深入探讨如何利用ZooKeeper实现分布式Session,并通过分析提供的"基于ZooKeeper的分布式Session实现.doc"文档,解析其实现原理与步骤。 首先,理解ZooKeeper的基本概念至关重要。ZooKeeper是一个高可用、高...
Session的工作原理是:当用户访问网站并登录后,服务器会为该用户创建一个唯一的Session ID,并将其存储在服务器端。这个Session ID随后会被发送到客户端(通常是通过Cookie),客户端在后续的每次请求时都会携带这...
Session 实现购物车 Session 实现购物车是指通过使用 Session 和 Hashtable 来实现购物车的添加、修改和删除操作。下面是对该技术的解释和知识点总结: 购物车原理 购物车的原理是通过使用 Hashtable 和 Session ...
虽然这个实现方式简化了许多实际项目中的复杂性,但它为初学者提供了一个了解`Session`工作原理和实现基本购物车功能的良好起点。在实际开发中,通常会结合数据库存储购物车信息,以支持更多功能,如持久化购物车、...
"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...