cookie&session

来源:互联网 发布:代码编程 编辑:程序博客网 时间:2024/06/13 14:05

cookie原理








session用法

session默认保存在系统临时目录下,windows/temp下

可以通过修改session.save_path设置

php没有自动创建目录能力(特别是安全模式下不能创建目录、文件)

session使用注意事项:1.可以再php.ini文件设置auto_start自动开启即可使用session时不用session_start

2.session_start之前有输出,可用@注释掉提示或修改php.ini里output_buffering=4092

销毁session四种方法

\

session_destroy();//销毁文件,$_SESSION数组仍在

$_SESSION=array();//$_SESSION数组赋值为空,session文件仍存在

unset($_SESSION);//销毁session不成功,unset只能销毁session某个值(session数组只能为键值)

一次session操作两次读取session文件,$_SESSION存取是在内存,session文件则是在服务器硬盘,所以在同一脚本可能不一致,再下一脚本又归于一致



session文件的垃圾回收机制由php.ini的session.gc_probability=1个session.gc_divisor=1000决定,默认为1/1000

session入库的实现

<?php//定义六个函数/** * 在session开启时执行, * 负责完成session存储所需要资源的初始化工作! */function sess_open() {echo 'open<br>';//连接数据库$link = mysql_connect('127.0.0.1:3306', 'root', '123456');mysql_query('set names utf8');mysql_query('use itcast');}/** * session_start()时,开启session时被执行 * * 负责从当的session记录中,将session数据读取出来 * * @param $sess_id string 当前的sessionID * * @return string session的数据,不需要序列化。如果没有读到则返回空字符串! */function sess_read($sess_id) {echo 'read<br>';//利用 select 查询$sql = "select sess_data from `session` where sess_id='$sess_id'";$result = mysql_query($sql);if($row = mysql_fetch_assoc($result)) {return $row['sess_data'];} else {return '';}}/** * 在 脚本结束时被执行 * * 负责,将当前的session数据,同步写到当前的session记录中 * * @param $sess_id string * @param $sess_data string  * * @return bool */function sess_write($sess_id, $sess_data) {echo 'write<br>';//执行写数据的操作!//当前session记录存在则更新sess_data,不存在则插入!$expire = time();$sql = "insert into `session` values ('$sess_id', '$sess_data', $expire) on duplicate key update sess_data='$sess_data', expire=$expire";return mysql_query($sql);}/** * 在调用了 session_destroy()系统函数时,被自动调用!\ * 负责的功能时,利用当前id,删除当前的session记录! * * @param $sess_id string * * @return bool */function sess_destroy($sess_id) {echo 'destroy<br>';//执行 delete 操作$sql = "delete from `session` where sess_id='$sess_id'";return mysql_query($sql);}/** * 在session_start() 是执行 * 负责 删除所有的垃圾数据 * * @param $maxlife int 最大的生命周期 * * @return bool */function sess_gc($ttl) {echo 'gc<br>';//$now = time();$last = $now-$ttl;//$sql = "delete from `session` where expire < $last";return mysql_query($sql);}/** * 脚本结束 */function sess_close() {echo 'close<br>';//mysql_close();return true;}session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');
持久化session
<?php//session_set_cookie_params(3600, '/', '100.com');session_start();//setcookie('PHPSESSID', session_id(), time()+3600);$_SESSION['name'] = 'php';var_dump($_SESSION);header('Location: 106.php?PHPSESSID='.session_id());//禁用cookie//先设置session.use_only_cookie=0 和 session.use_trans_sid=1?><a href="106.php"> 106.php</a>
同时session.ga_maxtime与cookie设置session_id时间同步

cookie与session比较