session总结

总结了一下session的一些基础使用,同时添加一些实现代码,方便自己查看

开启session

session_start; //之前不能有任何输出语句
$_SESSION['username'] = 'wenqing'; //c:/windows/temp/下产生文件

session的请求中请求头信息有一个Cookie:PHPSESSIONID=xxxx;保存的session_id,这个是唯一编号,可以通过编号查找session文件  
session的键名只能是字符串,否则会设置失败$_SESSION['test'] = 'test'; //新版本的php中已经支持了int类型session

session_name() //获取当前session的名称
session_id() //获取当前session的唯一id值

把session保存到cookie中

setcookie(session_name(),session_id(),time()+3600);

清空session

session_destory(); //清空所有的session
setcookie(session_name(),session_id(),time()-1);

禁用cookie后session还可以使用吗?

session_only_cookies = 1 //设置是否仅能通过cookie传递sessionid,还可以通过url传递,所以禁用cookie,session还是可以使用的
session_gc_maxlifetime = 1440 //多少s后,保存数据视为垃圾自动回收
1
<a href="dump.php?<?php echo session_name();?>=<?php echo session_id();?>">跳转输出session</a> //url传递session_id
session_id($_GET[session_name()]); //session_id() 获取或设置会话id
session_start();
var_dump($_SESSION);

session说明

当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。 但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,
在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中, 亦或通过 URL 进行传导。

自定义session处理器

由于默认的session保存在files中,这样无论是存取速度或者占用空间都是不太合适的,所以一般使用mysql或者缓存(redis,memcache进行存储)

session.save_handler = files

下面是简单的实现以下session自定义mysql的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
ini_set("session.save_handler",'user');
function open(){
echo "<h1>call open</h1>";
$link=mysql_connect("127.0.0.1",'root','root') or die('connect error');
mysql_set_charset('utf8');
mysql_select_db('test');
return true;
}
function close(){
echo "<h1>call close.</h1>";

return true;
}
function read($session_id){

echo "<h1>call read</h1>";
$sql="SELECT session_data FROM sessions WHERE session_id='{$session_id}'";
$result=mysql_query($sql);
if($result && mysql_num_rows($result)>0){
$row=mysql_fetch_assoc($result);
return $row['session_data'];
}else{
return false;
}
}
function write($session_id,$session_data){
echo "<h1> call write </h1>";
$lifetime=get_cfg_var("session.gc_maxlifetime");
$session_update_time=time()+$lifetime;
$sql="INSERT sessions VALUES('{$session_id}','{$session_data}',{$session_update_time})";
$result=mysql_query($sql);
if(!$result){
$sql="UPDATE sessions SET session_data='{$session_data}',session_update_time='{$session_update_time}' WHERE session_id='{$session_id}' AND session_update_time>".time();
mysql_query($sql);
}
}
function destroy($session_id){
echo "<h1>call destroy</h1>";
$sql="DELETE FROM sessions WHERE session_id ='{$session_id}'";
echo $sql;
return mysql_query($sql);
}
function gc(){
echo "<h1>call gc</h1>";
}
session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');

文章目录
  1. 1. 开启session
  2. 2. 把session保存到cookie中
  3. 3. 清空session
  4. 4. 禁用cookie后session还可以使用吗?
  5. 5. session说明
  6. 6. 自定义session处理器
|