cookie&session

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比较



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值