PHPSESSID生成

生成规则是根据hash_func散列来生成的,相关的参数有:
- 客户端IP
- 当前时间(秒)
- 当前时间(微妙)
- PHP自带的随机数生产器

hash_func是phpinfo中的session.hash_function配置。如下:

; Select a hash function for use in generating session ids.
; Possible Values
;   0  (MD5 128 bits)
;   1  (SHA-1 160 bits)
; This option may also be set to the name of any hash function supported by
; the hash extension. A list of available hashes is returned by the hash_algos()
; function.
; http://php.net/session.hash-function
session.hash_function=0

PHP session工作原理

以下以cookie传输PHPSESSID描述。
1. 客户端请求一个php的服务端地址。
2. 服务端收到请求,此次php脚本中包含session_start()。
3. 服务端会生成一个PHPSESSID。(默认session存储方式为session.save_handler=files,文件形式存储。生成的session文件名规则即为sess_PHPSESSID,session文件存在session.save_path中。)
4. 服务端响应首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/。在客户端生成一个cookie保存此PHPSESSID。
5. 此时,客户端的cookie里面包含了PHPSESSID,之后客户端的每次请求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服务端之后每次接收到客户端的请求就都能根据这个PHPSESSID来找到服务端的session文件,通过对这个session文件的读写操作即实现了session的超全局变量属性。

如果客户端禁用了cookie,由于无法使用cookie传递PHPSESSID,那么客户端每次请求,服务端都会重新建立一个session文件,而无法通过通过PHPSESSID来重用session文件,所以session也就失效了。
这种情况可以设置session.use_trans_sid来传输PHPSESSID,具体实现方式与cookie的区别就是将PHPSESSID通过HTTP的GET传输。每次请求的地址里面都会补全PHPSESSID参数”url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”来实现。

PHPcli模式通过session_id()使用session

官网说明
可以通过它来获取当前会话的PHPSESSID,也可以通过它来设置当前的会话PHPSESSID。
PHPcli模式下可以通过设置这个,达到使用session的目的,非常方便。
例如:

<?php
// session_id('vingbrv8m64asth0nhplu9gmb7');
session_start();
$_SESSION[md5(rand(100,999))] = rand(100,999);
var_dump($_SESSION);

未使用session_id()的时候,在cli模式下运营此php脚本三次:

可以看到由于cli模式下没有传输PHPSESSID,所以每次都是一次性的session使用。session没有生效。
查看下session文件:

这三个session文件是我们三次cli执行生成的。三个session文件的内容如下:


将之前的session文件删除掉,然后如果我们使用session_id(),为cli脚本设定固定的PHPSESSID。

<?php
session_id('vingbrv8m64asth0nhplu9gmb7');
session_start();
$_SESSION[md5(rand(100,999))] = rand(100,999);
var_dump($_SESSION);

然后cli运行脚本三次:

再查看下session文件,就只有一个我们设置的session文件:

文件内容:

这样,在PHPcli模式下,session就可以使用了。
session_id()的作用简略说,即为PHP脚本自己设定了PHPSESSID,而不需要传输PHPSESSID。
另外,cli模式下,session可以使用,apache的ab测试,session也就可以使用了。

PHP SESSION PHPSESSID session_id()相关推荐

  1. 【session】session和session_id的理解

    什么是session session用来追踪每个用户的会话.使用服务器生成的session_id进行标识,用来区别用户. session存放在哪里 session存放在服务器的内存中,session_ ...

  2. 函数项目一个超感人的故事:关于swfupload在某些环境下面session丢失的完美解决方案(看完我哭了)...

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 标题吸引到你了吗? 先说一下这个题问成形的原因.大家都晓得  session是靠cookie ...

  3. 修改PHP session 默认时间方法

    修改三行如下: 1.session.use_cookies 把这个的值设置为1,利用cookie来传递sessionid 2.session.cookie_lifetime 这个代表SessionID ...

  4. php session 函数,PHP中Session()函数使用

    对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用. 由于 Session 是以文本文件形式存储在 ...

  5. session 原理

    PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了.必须注意的是:session不一定必须依赖 ...

  6. php修改session生存时间,修改session的过期(生存)时间

    以下我以php为例,万变不离其宗,希望对大家都有用吧. session与cookie: 了解过两者的众所都知道,有些信息保存到cookie,有些出于安全问题就不能直接存到浏览器,这就要用到sessio ...

  7. 【转】PHP会话Session使用详解

    原文地址:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=50716 对比起 Cookie,Session 是存储在服务器端的会话,相 ...

  8. PHP 会话(session 时间设定)使用入门

    PHP 会话(session 时间设定)使用入门 在PHP开发中对比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Sess ...

  9. php开发面试题---禁用cookie之后,如何使用session

    php开发面试题---禁用cookie之后,如何使用session 一.总结 一句话总结: 在每个url后面自动加上PHPSESSID的值即可,用户禁止cookie后,服务器仍会将sessionId以 ...

最新文章

  1. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...
  2. MySQL 也替换了master、slave
  3. 【Docker】Linux安装docker-compose
  4. java主类结构设计,设计结构(1)
  5. 模拟课----需求文本
  6. MT76x8的多网口与GPIO复用配置
  7. 【Ubuntu】 使用Xshell5连接Ubuntu16.04
  8. 云鲸扫拖一体机器人说明书_云鲸扫拖一体机器人开箱测评。拖地机器人的天花板是什么样的?...
  9. Chrome 调试技巧 1
  10. 使用CLI扩展和重新平衡Couchbase集群
  11. Nacos集群部署说明
  12. python实现运动模糊图像_OpenCV+Python实现图像运动模糊和高斯模糊
  13. 数据结构 8-0 排序
  14. WebService - RoadMap
  15. Mac OS X:解决开机黑屏时间长(恢复秒开)
  16. python3命令不识别_python3不是内部命令
  17. 钢铁业步履蹒跚,中钢如何借助 IBM 率先实现大数据与 AI 化转型?
  18. C# Panel半透明
  19. python打印列表的下标和值的例子:
  20. MGC Group大公司已布局区块链食品供应链技术领域

热门文章

  1. X活手环的表盘自定义修改
  2. MATLAB小技巧(24)RBF,GRNN,PNN-神经网络
  3. 2.1.4 奈氏准则和香农定理
  4. Partical System
  5. Controller规范和接口定义,添加一条新数据并返回此数据的ID(主键)
  6. c#网络通信框架networkcomms内核解析之七 数据包创建器(PacketBuilder)
  7. struts2_类型转换错误消息的显示和定制
  8. android 类似课程表,学生好帮手 Android三款课程表软件横评
  9. 课程设计 树的应用与实现
  10. Multimodal Dual Attention Memory for Video Story Question Answering阅读笔记