PHP SESSION PHPSESSID session_id()
来源:互联网 发布:用c语言打开文件夹 编辑:程序博客网 时间:2024/05/17 22:01
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-functionsession.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。
<?phpsession_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()
- session.php session_id('abcd');
- php-session_id()
- php session_id() session_name()
- PHP函数:session_name() session_id()
- PHP中的session_id()
- PHP修改session_id
- php中session_id()函数详细介绍,会话id生成过程及session id长度
- PHP函数补完:session_id()
- php 更改SESSION_ID 字符串长度
- PHP函数补完:session_id()
- PHP函数——session_id()
- session_id
- session_id
- session_id()
- session_id()
- php中session_id的使用注意
- [转载]php文件后边自动加&PHPSESSID=ee2cb583e0b94bad4782ea
- ExpandableListView
- MFC设置应用程序图标
- 网页色彩搭配
- 【BZOJ 3884】【欧拉定理或者求幂大法】上帝与集合的正确用法
- Java开发的23种设计模式详解
- PHP SESSION PHPSESSID session_id()
- JAVA-内部类
- Python中继承和多态
- (0004) iOS 开发之CocoaPods 升级过程
- android状态栏标题栏的沉浸式模式
- Lua 调用C++ 出现的问题
- ubuntu下安装libevent(libevent-2.0.22-stable),Qt下运行
- JAVA学习36_Java NIO原理图文分析及代码实现
- 第六章 GUI-图形用户界面