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

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

session和cookie是会话管理的两种方式

1,cookie

cookie存在客户端,隐藏在http头中传达给服务器。在php中通过setcookie()创建和销毁cookie。

创建(生存周期为7天):

setcookie("name","value",time()+60*60*24*7);    //未设置第三个参数(有效截至日期)时,会在关闭浏览器后过期

创建value为数组的cookie:

setcookie("user[name]", "cookieone");setcookie("user[id]", "cooietwo");   //这样访问$_COOKIE["user"],它便是一个数组

注意不要在cookie里直接存敏感信息,创建前不能有任何东西输出给浏览器,因为cookie是http头的一部分。自动登陆的验证或防止cookie伪造,可以采取比如:hash(部分密码+特定字符串方式)处理用户验证

 

销毁(把有效期设置为当前时间之前某一时间):

setcookie("name","value",time()-1);  //保证这个时间是过去的值就行

 

访问($_COOKIE为超全居数组,任何地方直接使用)

$name=$_COOKIE["name"]

注意,从cookie取得的数据页是不可信的,永远不要相信用户输入!

2,session

session有两种方式:基于cookie和使用url。一般使用基于cookie的方式。服务器建立session会话之后会为用户分配一个sessionid,并在服务器端的session保存目录里生成对应该id的文件,以后便凭借这个id来识别用户。

这个id一般存在cookie里(cookie默认名称为PHPSESSID,可以通过session_name()取得,可以在配置文件里修改session.name,值为php随机生成。还有很多session的配置都在配置文件里,比如有效时间,默认为0;启用垃圾回收的概率等)。

用户禁止浏览器使用cookie时,sessionid可以通过url传递(配置文件里如果session.use_trans_sid =1,在不支持cookie时php会自动把sessionid加在url上,不过不建议这种方式,因为用户会分享网址!这个配置默认为0)

1)session的开始

session_start();    //每个使用session的脚本都需要包含这个,返回类型为bool

 

使用这个函数后,php也许会检查是否有过期无效的session文件,检查的概率可以配置。然后自动生成sessionid或者从服务器硬盘存session的文件夹中取得该id对应的所有信息压入内存(这一点自己可以通过memory_get_usage(),microtime(true)这两个函数验证)

2)设置session信息

$_SESSION["key"]="ualue";    //脚本结束后再写入session文件,因此当前设置的脚本不能访问$_SESSION["key"]

3)取得session值

$x=$_SESSION["key"];    //超全居数组,直接使用

 4)销毁

SESSION发出去的COOKIE一般在浏览器关闭后,才会过期,假如需要人为强制过期,需要人工销毁。

1,session_start();2,$_SESSION=array();//删除内存中的值3,setcookie(session_name(),' ',time() -1);//删除浏览器端cookie4, session_destroy();// 删除session文件和id,彻底销毁

大神更为详细的解读:

3,session、cookie

session大部分情况下也是基于cookie的,只是把重要的、敏感的信息没有存在cookie,只存了一个随机字符串(sessionid)而已

在配置文件里还可以设置只接受来自cookie的sessionid

cookie一般是做长时间记忆登陆的(比如一个月内不用登陆),session一般持续到浏览器关闭

cookie理论上也可以用作网站每个页面的身份识别,但是因为cookie的数据是不可信的,每次都需要对信息有所检验,而session信息存在服务器端,自然不存在这个问题。

session在网站大量采用ajax的情况下,需要处理并发问题,因为有时候多个进程在操作同一个session

 

 

转载于:https://www.cnblogs.com/jcuan/p/5558466.html

你可能感兴趣的文章
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
查看>>
DataWorks:任务未运行自助排查
查看>>
ionic/cordova热部署
查看>>
「镁客早报」特斯拉裁员,马斯克解释没有办法;微软推出Azure DevOps赏金计划...
查看>>
Flink入坑指南第五章 - 语法糖 view
查看>>
centos 7.4 使用 pgxc_ctl 安装与使用
查看>>
Redis 单key值过大 优化方式
查看>>
【数据库】表分区
查看>>
nutz-sqltpl 1.3.4.RELEASE 发布,在 Nutz 项目中“解决 Java 拼接 SQL”问题
查看>>
城市 | 800个地铁站数据透析的京沪白领图鉴:隐形土豪、无产中产阶级和猪猪女孩...
查看>>
前端脚本!网站图片素材中文转英文
查看>>
linux的常用易忘命令
查看>>
PHP 分割字符串
查看>>
java 基于QRCode、zxing 的二维码生成与解析
查看>>
关于职业规划的一些思考
查看>>
img垂直水平居中与div
查看>>
Fabrik – 在浏览器中协作构建,可视化,设计神经网络
查看>>
防恶意注册的思考
查看>>
http2-head compression
查看>>
C# 命名空间
查看>>