网络请求中的cookie与set-Cookie的交互模式和作用

首先我们需要思考,很多问题。

1.当很多人访问统一个网服务器,服务器如何来区分不同的用户呢?

答:sessionid,sessionid保证了浏览器和服务器唯一性的通信凭证号码,session保存在服务器上,
sessionid保存在浏览器等客户端,服务器根据浏览器发送来的sessionid作为一个唯一的key值找到
对应的用户,所以说sessionid的唯一性用来区别和查询用户信息,因此sessionid的作用不言而喻了吧。

2.我们经常说浏览器关闭后session就会被清除,那session有生命周期么?

答:有的,这个是服务器的配置,浏览器关闭只是把sessionid给清除了,所以在此打开浏览器并请求服务,
你的登录状态无法找到,由此你需要重新登录。
一般情况下,浏览器如果不刷新或者不重新请求的话,服务器一般会缓存session数据20分钟左右。

3.cookie会被缓存,sessionid保存在cookie中,sessionid一定会被清除么?

答:不一定,这个需要服务器cookie的设置了,但总体而言,因安全性考量,最好不要缓存sessionid

4.cookie保存用户状态时需要保存sessionid么?

答:不需要,保存user_id或者其他token即可

5.cookie是如何发送到服务器的?

答:使用http请求头,浏览器进行了封装,但在一般网络编程时可以加上

如

GET / HTTP/1.1
Host: www.guancha.cn
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: pgv_pvi=9956446208; pbm_total_match_cookie_281589=1; has_js=1; Hm_lvt_8ab18ec6e3ee89210917ef2c8572b30e=1414852570,1414879794,1414884316,1414901793; Hm_lpvt_8ab18ec6e3ee89210917ef2c8572b30e=1414901793

6.上面的例子中没有sessionid么?

答:是的,没有,sessionid只是一个代称,这个变量名可以改变,比如在php中使用phpsessid,
在java web中jsessionid

7.登录前有sessionid,登陆后需要重新设置么?

答:依情况而定,如果安全性要求较高的,可以重新生成一个sessionid,另外必须先销毁之前的一个sessionid

8.sessionid生成后如何发送到浏览器?

答:默认情况下,服务器会挂载响应消息 set-Cookie来只是浏览器更新sessionid,不需要手动更新

如:
HTTP/1.x 200 OK 
X-Powered-By: PHP/5.2.1 
Set-Cookie: TestCookie=something from somewhere; path=/ 
Expires: Thu, 19 Nov 2007 18:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-type: text/html 

//如果是按照第7问生成的sessionid,这个也不需要手动发送,当然也可以手动发送

try do it!

时间: 2024-08-29 21:59:40

网络请求中的cookie与set-Cookie的交互模式和作用的相关文章

网络请求中常见的加密机制和加密算法理解

请求安全性: 服务器端在接收到请求的时候,要主动鉴别该请求是否有效,是否可接受. token:已登陆用户的识别码 解决的问题:用户调用接口时,不用每次都带上用户名和密码,避免了频繁在网络中传输密码被截获的风险. 使用场景:用户登录系统时传入用户名和密码,服务器校验成功之后,根据uuid等参数生成token返回给客户端,同时把该token和该用户的对应关系缓存在服务器端.客户端在后续的请求接口中不用每次都传入用户名和密码,只需要传入token即可.服务器会根据token确定客户端的身份. 注意:t

IOS 网络请求中设置cookie

本文转载至 http://tec.5lulu.com/detail/108k0n1e626py8s96.html 1ASIHTTPRequest ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证. cookie的支持 如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,并供下次使用.你可以用 [ ASI

基于AFNetWorking搭建APP的网络请求框架[iOS]

自从AFNetWorking(下文简称AFN)更新2.0版本之后,AFN的许多的问题得到的有效的解决,写法也得到了完善.前期主流的第三方网络类库 ASI作者宣布不再维护,国内大多数的主流APP都逐步接受并开始采用AFN.出于各自公司项目的不同需要,大家都会在AFN的基础上加一层不尽相同的封 装.很多新APP在选择方式时也会非常纠结.如何封装才可以让AFN更有效率更方便的应用于项目呢,对于这个问题,各人有各人的看法.基于做过以及读过的 几个项目,也来谈一下如何搭建一个APP的网络请求框架.由于本人

Android下网络请求的两个封装类

1.背景介绍 我们在Activity和Fragment中做网络请求的时候,往往用到线程和handler消息处理机制等做处理.这里,我们将网络请求,一个get和一个post请求,使用线程封装一下.这样就剥离开了Activity中的代码量,将复杂的代码,封装在不同的类中,实现一个类的单一原则. 2.GET请求封装 /** * GET提交的网络请求<br> * <br> * 传递过来主UI线程的消息处理器,经过线程处理之后,返回一个消息给主UI线程 <br> * 在返回的ms

http网络请求基础get,post请求的注意事项

http网络请求中比较常用的请求方式有get和post请求,其它的如head, put, 以及自定义的OPTIONS请求先忽略 java中使用的请求对象一般是HttpUrlConnection 我们请求的地址需要使用URL对象将字符串地址进行封装 即URL connURL = new URL("http://www.xxxx./") 网络请求的步骤 GET请求 首先要对请求的参数进行中文编码 java.net.URLEncoder.encode(parameters.get(name)

关于android-async-http的使用,封装网络请求

首先async是跟安卓中自带的AsyncTask很像,不过它更简单 异步基于回调的Http客户端为Android构建,是基于Apache HttpClient库的.所有的请求都是位于应用程序主线程 UI 之外,但任何回调逻辑将相同的线程上执行回调,使用Android的处理程序创建消息传递. 首先封装一下AsyncHttpClient,这个jar包中的核心类 public class AsyncHttpRequestClient { private static AsyncHttpClient c

Android网络请求心路历程

HTTP请求&响应 既然说从入门级开始就说说Http请求包的结构.一次请求就是向目标服务器发送一串文本.什么样的文本?有下面结构的文本.HTTP请求包结构 例子: 1 2 3 4 5 6 7     POST /meme.php/home/user/login HTTP/1.1     Host: 114.215.86.90     Cache-Control: no-cache     Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed   

4.2.1 网络请求之HTTP

HTTP请求&响应:(常用的只有Post与Get,还有Head/put/delete/connect/options/trace) Get&Post(建议用post规范参数传递方式,并没有什么更优秀,只是大家都这样社会更和谐.) 网络请求中我们常用键值对来传输参数(少部分API用json来传递,毕竟不是主流). 通过上面的介绍,可以看出虽然Post与Get本意一个是表单提交一个是请求页面,但本质并没有什么区别. Get方式:在url中填写参数:  http://xxxx.xx.com/xx

【iOS】网络请求框架封装

在使用网络请求的过程中,可以使用系统的框架.ASI.AF.MK等等,但是如果需要更换项目的网络请求框架(比如,项目之前用的ASI的框架,现在需要更换为AF),那么这将是一个浩大的工程.项目初期,怎么搭建网络请求框架,才可以让修改网络请求的工程量减到最小呢,这是我们今天要说的问题. 环境信息: Mac OS X 10.10.1 Xcode 6.1.1 iOS 8.1 正文 封装的网络请求框架一共三层: 第三层:ASI.AF或者其他网络请求方式.第二层:第二层分有基类与类目(Category)构成,