当代码启用session,
<?php
session_start();
//setcookie('cookie_test_name', 'yuanjunq',time()+5*60);
//$_SESSION['name'] = 'NAME';
//$_SESSION['age'] = 20;
echo "<pre>";
var_dump($_SESSION, $_COOKIE);
请求这段代码:
此时服务器端,在/tmp目录下,会生成一个session文件:
再次刷新:
阅读一下cookie里面的信息(mac 下 chrome的cookie文件是 ~/Library/Application Support/Google/Chrome/Default/Cookies):
使用 vim Cookies
可以知道这是一个SQLite文件,可以使用sqlite3命令查看内容:
编辑代码
<?php
session_start();
setcookie('cookie_test_name', 'yuanjunq',time()+5*60);
$_SESSION['name'] = 'NAME';
$_SESSION['age'] = 20;
echo "<pre>";
var_dump($_SESSION, $_COOKIE);
刷新页面,打印信息:
再次刷新页面,会重新set-cookie的过期时间:
再查看一下cookie里面的信息
查看一下 cookies表结构:
#格式化之后
CREATE TABLE cookies (
creation_utc INTEGER NOT NULL,
host_key TEXT NOT NULL,
name TEXT NOT NULL,
value TEXT NOT NULL,
path TEXT NOT NULL,
expires_utc INTEGER NOT NULL,
is_secure INTEGER NOT NULL,
is_httponly INTEGER NOT NULL,
last_access_utc INTEGER NOT NULL,
has_expires INTEGER NOT NULL DEFAULT 1,
is_persistent INTEGER NOT NULL DEFAULT 1,
priority INTEGER NOT NULL DEFAULT 1,
encrypted_value BLOB DEFAULT '',
firstpartyonly INTEGER NOT NULL DEFAULT 0,
UNIQUE (host_key, name, path)
);
查看session文件里的内容:
session_save_path('/tmp/mysession');
设置session文件的存储目录 , 需在 session_start()函数之前调用
session_save_path('3;/tmp/mysession');
将创建如下目录的session存储:"/tmp/mysession/7/h/l/sess_7hl5bijf1rpk1l4pcg59bjpjt0"
如果浏览器禁用COOKIE, 则需要使用URL或者FORM表单传递PHPSESSID, 服务端使用 session_id()函数 设置PHPSESSID .
自定义session处理方式:
<?php
session_set_save_handler('open1','close1','read1','write1','destroy1','gc1');
function open1($path='',$name=''){
echo 'this is open.';
return true;
}
function close1(){
echo 'this is close1.';
return true;
}
function read1($id=0){
return 'name|s:5:"kNAME";age|i:520;'; // 直接copy 某个session文件里的内容,所以可以正常解析
}
function write1($id=0,$data=[]){
echo 'this is write1.';
return true;
}
function destroy1($id=0){
echo 'this is destroy1.';
return false;
}
function gc1($time){
echo 'this is gc1.';
return true;
}
session_start();
echo "<pre>";
var_dump($_SESSION, $_COOKIE);
运行结果: