`
rubyeye
  • 浏览: 27092 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

会话cookie和持久化cookie实现session机制

阅读更多
   当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为了标识唯一的客户端用户,内容不会重复,这就是sessionid.
   当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.
   可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).
   上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.
   如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.
分享到:
评论
8 楼 plmmmmlq 2014-05-16  
Cookie是客户端技术,Session中服务端技术,但是Session需要Cookie的支持。
7 楼 sito 2012-05-31  
上面有朋友说不存在两种cookie,大家去查查外文资料或许可以得到更精确的结论。

我只说下我在做一个测试的结果。主要是验证如何解决同一机器同名用户同时登录web app,并且是当作两个人在使用,如何作区分标识。

3台机器:apache + 2 tomcat做一个集群环境

用IE6访问负载ip,负载因子是1:1

servlet干的事是写会话cookie(只做一次)、读cookie,每个浏览器窗口是一个独立的进程,一般情况,这个窗口都会指向某个集群node A,不断刷新(相当于另一次请求)这时session id当然是一样的,cookie的value也会是一样的。这时将这个集群node A停止,请求会被指向另一个node B,这时显示的session id变了,但cookie的值还是不变的。

找到了方法,用会话cookie去区分标识用户!!

如果写的持久cookie,不管开多少个窗口,读的值都是一样的,因为是读的磁盘,磁盘上只有一个这样的cookie
6 楼 seven_cuit 2010-12-01  
很有帮助,另外想请教一下 rubyeye, 如果Server端没有使用Session,以Java Web Server为例,那么第一次访问网站时会不会从Server端返回 jsessionid?
5 楼 zhangzhanliang 2010-04-21  
某网络在访问服务器后,可能会自动更换本地的IP,这个时候的本地存储的 sessionID 与服务器存储的 sessionID,是不是会有一方发生变化呢?
4 楼 he_lux 2009-02-18  
我觉得把COOKIE分为会话COOKIE和持久COOKIE不太妥当,这样让人感觉有两种COOKIE。
在TOMCAT里,SESSIONID存到COOKIE里后,有这么一句:cookie.setMaxAge(-1);浏览器关闭后COOKIE就会被删除。
所以应该没有两种COOKIE,COOKIE只有一种,javax.servlet.http.Cookie。所谓的这两种COOKIE,实际上应该是COOKIE的setMaxAge的结果不同而已。
3 楼 he_lux 2009-02-12  
第一次访问一个网站,网站服务器会在响应头里加上Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3信息,客户端收到这个信息后,就把SEESIONID存在自己的COOKIE里面,然后把COOKIE内容存到浏览器进程的内存里

这样理解对吗?
2 楼 smile_juan 2009-02-09  
不是,在服务器端设置过期时间后就是持久cookie了
1 楼 he_lux 2009-02-06  
谢谢楼主分享,让我理解到了什么是会话COOKIE和持久COOKIE。

但有个疑问,浏览器使用会话COOKIE还是持久COOKIE,是在浏览器里设置么?

相关推荐

    WEB16-session&cookie-源代码.rar

    注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里 示例: cookie.setMaxAge(10*60); ...

    session与cookie

    一种是会话性质的cookie,存放在浏览器内存中,当你在用代码向客户端写入cookie的时候,如果没有指定过期时间,那么cookie是存放在浏览器的内存里面的,不会持久化在硬盘上,也就是你在浏览器的临时文件里找不到!...

    mongoose-express-sessions:使用Mongoose进行Express会话存储

    猫鼬的快速会话存储 用法 const mongoose = require ( 'mongoose' ) const express = require ( 'express' ) const session = require ( 'express-session' ) const StoreSession = require ( "mongoose-express-...

    spring-mvc-redis-session:带有redis的spring-mvc http会话

    spring-mvc-redis-session Spring-mvc session with redis. 使用redis作为session的持久化媒介。 特别说明 注意修改RedisHttpSession中的参数: COOKIE=session id DOMAIN=域名

    asp.net教学讲义

    全部16章220页 Asp.net教学讲义 1 讲义内容 6 第一章:asp.net和web窗体 6 ...1.1.3 静态网页与动态网页 8 1.1.4 客户端代码与服务器端代码 8 1.1.5 ASP.NET简介 8 1.2 Web 窗体与ASP.NET...16.8 格式化Web部件和区域 220

    java面试题

    持久化状态(persisted) 58 71.5.3. 游离状态(detached) 58 71.5.4. hibernate的三种状态之间如何转换 59 71.6. Hibernate并发机制,并发问题的处理。 59 71.6.1. Hibernate并发机制 59 71.6.2. 并发问题解决方案 59...

    J2EE应用开发详解

    294 16.3.5 数据库连接池中使用JDBC 297 16.4 小结 302 第17章 ORM与Java持久化机制 303 17.1 ORM概述 303 17.2 域模型 304 17.3 实体域对象的持久化模式 304 17.4 JPA 305 17.4.1 实体 306 17.4.2 EntityManager ...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。  对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序...

    Python之渗透测试笔记(五) ——Requests模块

    Requests模块Requests模块简介Request模块的7个主要参数Response响应内容定制请求头POST请求cookiesession会话请求与响应 Requests模块简介 request模块是python的第三方库,主要功能如下: Keep-Alive & 连接池 ...

    java 面试题 总结

    对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的...

    JAVA面试题最全集

    描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【消息队列】持久化消息非常慢 162 【消息队列】消息的不均匀消费 162 【消息队列】ActiveMQ中的消息重发时间间隔和重发次数吗? 164 【Dubbo】dubbo介绍 166 Dubbo 是什么 166 Dubbo 架构流程图 167 调用流程 167 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    06 COOKIE和SESSION配合使用 第54章 01 今日内容概要 02 Django内容回顾 03 Django请求生命周期之Http请求 04 Django请求生命周期之FBV和CBV 05 Django请求生命周期之CBV扩展 06 瞎扯淡 07 Django请求生命周期之...

    Java及大数据学习路线.pdf

    JDBC 1.2JavaWeb HTML基础与CSS JavaScript DOM 与 jQuery XML与Tomcat HTTP协议 服务器端组件Servlet JSP EL表达式 JSTL 会话控制Cookie和Session 服务器端组件Filter 服务器端组件Listener 国际化 异步数据传输...

    深入体验Java Web开发内幕

    7.4 Session  7.5 Session的典型案例  7.6 Session的持久化管理  7.7 思考与实践 第8章 JSP  8.1 JSP入门  8.2 JSP基本语法  8.3 JSP指令  8.4 out对象  8.5 pageContext对象...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    3.4.1 Session、Application和Cache 3.4.2 Request 3.4.3 Response 3.4.4 Server 3.4.5 User 3.4.6 Trace 3.4.7 访问其他类中的HTTP上下文 3.5 总结 第4章 服务器控件 4.1 服务器控件的类型 ...

    ASP.NET4高级程序设计(第4版) 3/3

    3.4.1 Session、Application和Cache 84 3.4.2 Request 85 3.4.3 Response 86 3.4.4 Server 88 3.4.5 User 90 3.4.6 Trace 91 3.4.7 访问其他类中的HTTP上下文 96 3.5 总结 96 第4章 服务器控件 ...

    PHP 5.4.40 Released 中文手册

    •国际化与字符编码支持 •图像生成和处理 •邮件相关扩展 •数学扩展 •非文本内容的 MIME 输出 •进程控制扩展 •其它基本扩展 •其它服务 •搜索引擎扩展 •针对服务器的扩展 •Session 扩展 •文本处理 •变量与...

    Java语言基础下载

    Session和Application对象 610 JSP的汉字问题的原理 611 自定义标签 613 标准标签的使用 618 内容总结 621 独立实战 622 第三十章:struts入门 623 学习目标 623 Struts简介 624 什么是应用框架 624 WEB框架所要解决...

Global site tag (gtag.js) - Google Analytics