文档章节

session与cookie

C
 CLOWN001
发布于 2017/03/28 00:02
字数 1409
阅读 21
收藏 2

作者:知乎用户
链接:https://www.zhihu.com/question/31079651/answer/136106134
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

HTTP协议与状态保持:Http是一个无状态协议1. 实现状态保持的方案:   1)修改Http协议,使得它支持状态保持(难做到)    2)Cookies:通过客户端来保持状态信息     Cookie是服务器发给客户端的特殊信息     cookie是以文本的方式保存在客户端,每次请求时都带上它   3)Session:通过服务器端来保持状态信息     Session是服务器和客户端之间的一系列的交互动作     服务器为每个客户端开辟内存空间,从而保持状态信息     由于需要客户端也要持有一个标识(id),因此,也要求服务器端和客户端传输该标识,     标识(id)可以借助Cookie机制或者其他的途径来保存2. COOKIE机制   1)Cookie的基本特点     Cookie保存在客户端     只能保存字符串对象,不能保存对象类型     需要客户端浏览器的支持:客户端可以不支持,浏览器用户可能会禁用Cookie   2)采用Cookie需要解决的问题     Cookie的创建       通常是在服务器端创建的(当然也可以通过javascript来创建)        服务器通过在http的响应头加上特殊的指示,那么浏览器在读取这个指示后就会生成相应的cookie了     Cookie存放的内容       业务信息("key","value")        过期时间       域和路径     浏览器是如何通过Cookie和服务器通信?       通过请求与响应,cookie在服务器和客户端之间传递       每次请求和响应都把cookie信息加载到响应头中;依靠cookie的key传递。3. COOKIE编程   1)Cookie类     Servlet API封装了一个类:javax.servlet.http.Cookie,封装了对Cookie的操作,包括:     public Cookie(String name, String value)  //构造方法,用来创建一个Cookie     HttpServletRequest.getCookies()           //从Http请求中可以获取Cookies     HttpServletResponse.addCookie(Cookie)     //往Http响应添加Cookie     public int getMaxAge()                    //获取Cookie的过期时间值     public void setMaxAge(int expiry)         //设置Cookie的过期时间值   2)Cookie的创建     Cookie是一个名值对(key=value),而且不管是key还是value都是字符串        如: Cookie visit = new Cookie("visit", "1");   3)Cookie的类型——过期时间     会话Cookie        Cookie.setMaxAge(-1);//负整数        保存在浏览器的内存中,也就是说关闭了浏览器,cookie就会丢失     普通cookie        Cookie.setMaxAge(60);//正整数,单位是秒        表示浏览器在1分钟内不继续访问服务器,Cookie就会被过时失效并销毁(通常保存在文件中)      注意:        cookie.setMaxAge(0);//等价于不支持Cookie;4. SESSION机制   每次客户端发送请求,服务断都检查是否含有sessionId。   如果有,则根据sessionId检索出session并处理;如果没有,则创建一个session,并绑定一个不重复的sessionId。   1)基本特点     状态信息保存在服务器端。这意味着安全性更高     通过类似与Hashtable的数据结构来保存     能支持任何类型的对象(session中可含有多个对象)    2)保存会话id的技术(1)      Cookie        这是默认的方式,在客户端与服务器端传递JSeesionId        缺点:客户端可能禁用Cookie     表单隐藏字段        在被传递回客户端之前,在 form 里面加入一个hidden域,设置JSeesionId:        <input type=hidden name=jsessionid value="3948E432F90932A549D34532EE2394" />     URL重写        直接在URL后附加上session id的信息        HttpServletResponse对象中,提供了如下的方法:         encodeURL(url); //url为相对路径5. SESSION编程   1)HttpSession接口     Servlet API定义了接口:javax.servlet.http.HttpSession, Servlet容器必须实现它,用以跟踪状态。     当浏览器与Servlet容器建立一个http会话时,容器就会通过此接口自动产生一个HttpSession对象   2)获取Session     HttpServletRequest对象获取session,返回HttpSession:       request.getSession();        //表示如果session对象不存在,就创建一个新的会话       request.getSession(true);    //等价于上面这句;如果session对象不存在,就创建一个新的会话       request.getSession(false);   //表示如果session对象不存在就返回 null,不会创建新的会话对象   3)Session存取信息      session.setAttribute(String name,Object o)  //往session中保存信息     Object session.getAttribute(String name)    //从session对象中根据名字获取信息   4)设置Session的有效时间     public void setMaxInactiveInterval(int interval)        设置最大非活动时间间隔,单位秒;        如果参数interval是负值,表示永不过时。零则是不支持session。     通过配置web.xml来设置会话超时,单位是分钟        <seesion-config>             <session-timeout>1</session-timeout>        </session-config>     允许两种方式并存,但前者优先级更高   5)其他常用的API     HttpSession.invalidate()     //手工销毁Session     boolean HttpSession.isNew()  //判断Session是否新建         如果是true,表示服务器已经创建了该session,但客户端还没有加入(还没有建立会话的握手)      HttpSession.getId()          //获取session的id6. 两种状态跟踪机制的比较       Cookie                        Session     保持在客户端                     保存在服务器端    只能保持字符串对象                支持各种类型对象    通过过期时间值区分Cookie的类型     需要sessionid来维护与客户端的通信       会话Cookie——负数                Cookie(默认)        普通Cookie——正数                表单隐藏字段       不支持Cookie——0                 url重写应用领域:web交易需要保存状态的时候,都可以使用,比如在分布式场景下可以利用分布式session技术等。

本文转载自:https://www.zhihu.com/question/31079651/answer/136106134

上一篇: jsp页面
下一篇: 重定向与转发
C
粉丝 1
博文 26
码字总数 6850
作品 0
朝阳
私信 提问
PHP学习10——Cookie和Session技术

主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原理 session控制 session的存储结构 传递sessi...

乌云上
2018/08/08
0
0
python3-django session支持-缓存+数据库Session或cookies加密

  缓存+数据库Session      配置settings.py   SESSIONENGINE='django.contrib.sessions.backends.cacheddb'#引擎   SESSIONCACHEALIAS='default'#使用的缓存别名(默认内存缓存,......

运维菜
2018/03/15
0
0
cookie与session区别及用法

cookie与session 区别 下面是cookie与session各自的特点,其实通过它们特点的不同就能看出他们的区别,我就不总结区别了,可以将他们的特性进行比较,不同之处就是他们的区别。 cookie特性 ...

马大哈tt
2017/11/21
0
0
彻底明白php的session机制

1.session.save_handler = files * 1. session_start() 1). session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中, PHP自身的垃圾回收是无效的,SES...

雍雍_yoyo
2013/08/22
0
5
yii get post cookie session

获取GET/POST过来的数据 Yii::app()->request->getParam('id'); # $GET['id'] or $POST['id'] session/cookie $_SESSION 等价于 Yii::app()->session; //启动session $session=new CHttpSes......

rooney
2014/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针的使用

#include <stdio.h>#include <stdlib.h>typedef struct node Node;struct node {int data;struct node* next;struct node* prev;};Node head;Node* insert(Node......

小张525
31分钟前
2
0
【大数据技术】——Hadoop(1)

什么是大数据 基本概念 《数据处理》 在互联网技术发展到现今阶段,大量日常、工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经...

须臾之余
45分钟前
6
0
比特币从地址逆向计算私钥

区块链 区块链简介 说到比特币,就不得不提区块链。那什么是区块链呢? 区块链本质是一个数据集,只不过数据的组织采用了比较特殊的方式,就是把数据拆分为一块一块的小数据集。 为什么要进行...

trayvon
今天
1
0
TypeScript……真香

写前端或者用 node 写命令行小工具一直采用的 es6 的语法,对于 TypeScript 则是秉持敬而远之的态度,毕竟团队中多推广一门语言所需要花费的精力都是让人望而却步的。所以对于 JavaScript 的...

郁也风
今天
3
0
shell基本案例

1、自定义rm linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做...

寰宇01
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部