博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
session和cookie实用手记
阅读量:7017 次
发布时间:2019-06-28

本文共 2402 字,大约阅读时间需要 8 分钟。

由来

浏览器和服务器间的数据交互,就是会话。        但是呢,http协议是无状态无记忆的,就会导致业务的不连续性。    [不连续性的说明]譬如你在xxx网站A界面登录成功,当你点击跳转到B界面时,又会提示请登录。        那么,怎么才能让服务器识别浏览器身份,认为是同一用户的多次请求,从而达到数据共享呢?        这就要用到[会话技术]了,本质上就是数据持久化存储。        会话技术,就是来解决http协议缺陷而导致的业务不连续问题。    相关补充:cookie在浏览器端的存储,是有数据量限制的,一般是4k;    而前端本地存储技术可弥补,譬如:    localStorage  (20M)   本地存储    只要用户不手动删除,就一直存在   应用场景:记住皮肤;浏览历史搜索;回到上一次离开的位置等    sessionStorage (5M) 会话存储    浏览器关闭就没了                应用场景: 单页面应用间数据的传递    可能存储在浏览器或硬盘上。        会话技术,从保存位置上有所区分:    持久化存储在服务端,是session    持久化存储在客户端,是cookie

cookie过程分析

浏览器请求XXX网站服务器后,服务器把数据存储在浏览器的cookie中;   后来的每次请求,浏览器都会携带该网站内所有的cookie作为身份,由服务端脚本来识别处理。   当然,这一过程是基于浏览器执行的。同一网站在不同的浏览器间存储的cookie是不能共享的。   cookie默认是会话周期,即从浏览器打开,请求服务器资源,到关闭浏览器这一过程。   cookie因存储在客户端而有安全性的问题,且每次请求都会携带所有的cookie内容。

使用

/*cookie*/    //存储的数据类型,一般是字符串    //格式说明(未展示所有参数,有兴趣的可查手册)    setcookie('数据名','数据值','有效期','有效路径','有效域名');        // 特例:    // PHP_INT_MAX    永久有效    // /              默认是当前目录及子目录有效,我这里改成了整站有效    // .6758591.com   默认是当前域名,我这里改成了跨子域    setcookie('age',18,PHP_INT_MAX,'/','.6758591.com');        // 增    setcookie('name','Lin');    // 删    setcookie('name','',0);    setcookie('name','',time()-1);    // 改    setcookie('name','Bin');    // 查    echo $_COOKIE['name'];

查看(方式很多,择其一)

clipboard.png

session过程分析

浏览器,首次请求xxx网站服务器后,服务端因session_start()而立即创建新的session文件;        文件名默认格式,示例: sess_0l4jphu0c88lm1ka6242po5763    sess_是前缀,后面的字符串是特殊算法生成的具有“唯一随机性”的串儿;        后通过http协议的响应头,setcookie去回传PHPSESSID=0l4jphu0c88lm1ka6242po5763;        浏览器收到响应内容后,将PHPSESSID作为身份信息,保存在cookie,默认是会话周期.        后来的每次请求都会,携带所有的cookie信息(包括身份信息)提交给服务器脚本;        服务端收到请求后,比对查找是否有对应的session文件;        如果有的话,则读取到超全局变量$_SESSION中;        否则会新建session文件,以进行$_SESSION操作.        备注:session文件也不是一直存在于服务端的,默认存活时间是24min。    默认以文件形式存储,也可存储在DB中.但读取操作还是要消耗服务器资源的。    由php.ini中可的相关参数决定存活时间、启动gc的几率、session_name命名及存储位置等。

使用

/*session*/    //存储的数据类型,几乎支持php的所有数据类型    //当前页面开启session会话机制.(只要用到的页面,就一定要首先开启.)    session_start();    //增/改    $_SESSION['name'] = 'Lin';    //删    unset($_SESSION['name']);     //删除单个session数据    $_SESSION = [];               //删除全部session数据    session_destroy();            //连session文件都销毁了    // 查    echo $_SESSION['name'];

查看(windows下本地服务器,且未修改php.ini中相关配置参数时)

clipboard.png

如果禁用了cookie,那么session如何使用

cookie和session本质上都能以数据持久化存储的方式解决身份识别问题,那么cookie被禁掉后,本地就没有浏览器身份信息随着请求发到服务器了,服务器自然就不能识别,从而不断的生成新的session文件。这是不可取的。   解决的关键是,要确保对同一个session文件的操作。那么在sesion_start()前就得指定session_id();

转载地址:http://qmzxl.baihongyu.com/

你可能感兴趣的文章
C#代码生成工具:文本模板初体验 Hello,World!
查看>>
[WinAPI] API 11 [创建目录]
查看>>
(C#)多线程-BackgroundWorker组件
查看>>
设计工作-Axure
查看>>
6.4. branch
查看>>
win7下Qt5使用mysql C++编程配置
查看>>
OK335xS PMIC(TPS65910A3A1RSL) reset
查看>>
CentOS6.5下安装JDK
查看>>
Webdis内部解析
查看>>
21.7. SNMP
查看>>
[LeetCode] Plus One
查看>>
Android SDK 中文 (56) —— ViewFlipper
查看>>
你必须要知识的架构知识~第四章 抽象类展现代码的层次感
查看>>
《基于MFC的OpenGL编程》Part 6 Keyboard and Mouse Control
查看>>
Java 实现的各种经典的排序算法小Demo
查看>>
DZ验证码不显示等
查看>>
Android 借助Stetho在Chrome上调试Android网络、数据库、Sharedpreferences
查看>>
77.4. pyinotify
查看>>
JsonHelper(Json帮助类)
查看>>
sqlalchemy 的 ORM 与 Core 混合方式使用示例
查看>>