http:基于请求,响应的无状态的协议
http无状态性与tcp短链接:一次tcp连接,只有一个http请求和一个http响应
http无状态性与tcp长链接:一次tcp连接,有多个http请求和多个http响应、
--------------------------------------------------------------------------------------------------
http的无状态?
建立连接/关闭连接,http协议没有一个内建机制来维护两个请求之间的状态,会话控制允许web服务器跟踪同一个浏览器用户的连续请求,实现记录用户的状态
如何解决http的无状态?
如何实时的记录该浏览器用户发送的连续的请求呢?
1)利用隐藏域
2)利用url字符串进行参数传递
均有浏览器发送的sessionid给服务器,服务器通过sessionid查用户的状态
【服务端语言呢,都是用来做http响应的,因此哦,响应头啦,就是作为服务端开发的人要关心的哦】
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------http请求(浏览器):
1)起始行:请求方法/请求资源/http版本
2)请求头:浏览器客户端信息
3)空行
4)正文
http响应(服务器):
1)起始行:http版本/响应码/响应消息
2)响应头:服务端信息,设置http cookie,
3)空行
4)正文:html文档
-----------------------------------------------------------------------
如何解决http的无状态?通过会话控制
1cookie:保存在客户端(内存/磁盘)
2session:保存在服务器端
========================================================================
cookie
1工作原理
客户端第一次通过http请求访问服务器,服务器观察到客户第一次访问,服务器在响应时在响应头为其响应一个cookie,
客户以后在通过http请求访问服务器时,会携带对应的cookie。,服务器根据客户端传来的cookie区分用户,
cookie在服务器的响应头中设定
服务端响应cookie的内容:
set-cookie
name:设置cookie的名称
value:设置cookie的值,通过$_COOKIE['name'],
expire:设置cookie的失效日期(会话cookie和持久cookie)
path:指定cookie在web服务器的存储路径
domain:cookie允许的域名
secure:hhtp/https
2cookie的分类
会话cookie:由session取代,存到缓存中(内存的浏览器进程保存)(expire=0)
持久cookie:会将数据存储到磁盘(文本信息保存)中(设置了expire)
3php中cookie的使用
setcookie()/setrawcookie()函数/header()来为客户端设置cookie
这种函数需要在其他信息被输出到浏览器前调用(http正文),因为设置cookie是作为服务器响应时在http响应头中的(http响应头)
删除cookie:将cookie失效,unset($_cookie['key'])--------浏览器自动删除
访问cookie$_COOKIE[]
isset($_COOKIE['key']):用来判断key的cookie是否存在