Session的中文是会话的意思,在Web编程中Session代表服务器与客户端之间的“会话”,意思是服务器与客户端在不断的交流。
在PHP中,使用$_SESSION[]可以存储特定用户的Session信息。并且每个用户的Session信息都是不同的。
当用户请求网站中任意一个页面时,若用户未建立Session对象,则服务器会自动为用户创建一个Session对象,它包含唯一的SessionID和其他Session变量,并保存在服务器内存中,不同用户的Session对象存着各自指定的信息。
Session信息的存储与读取
session_start(); //开启Session功能
session_id();//获取用户Session ID值,如需修改在括号中传值即可
利用Session变量存储信息:
$_SESSION["Session名称"]=变量或字符串信息;
读取Session变量信息(可赋值给一个变量或者直接输出):
变量=$_SESSION["Session名称"];
说明:
(1)使用Session前都需要在页面开头用session_start()方法开启Session功能。
(2)session_start()函数前不能有任何代码输出到浏览器,最好加在页面头部,或者先用ob_start()函数打开输出缓冲区。
(3)对于一个不存在的Session变量赋值,将自动创建该变量;给一个已经存在的Session变量赋值,将修改其中的值。
(4)如果新打开一个浏览器,则无法获取之前保存的Session信息。因为新打开一个浏览器相当于一个新的用户在访问。
(5)只要创建了Session变量,该Session变量就能被网站中所有页面访问。
(6)最好不要把大量的信息存入Session变量中,或者创建很大Session变量。如果Session变量保存的信息太多,同时访问网站的用户又很多会非常占用服务器资源。
演示代码:
//test1.php
<?php
session_start();
$_SESSION['name']="admin";
$_SESSION['password']=123456;
echo "所在文件:".$_SERVER["PHP_SELF"]."<br/>";
echo "用户名:{$_SESSION['name']} <br/>密码:{$_SESSION['password']}";
?>
//test2.php
<?php
session_start();
echo "所在文件:".$_SERVER["PHP_SELF"]."<br/>";
echo "用户名:{$_SESSION['name']} <br/>密码:{$_SESSION['password']}";
?>
运行截图
Session的生命期
Session对象的生命期指的是从用户在Session有效期内第一次访问网站直到不再访问网站为止的这段时间。
设置Session有效期:
ini_set('session_save_path','/tmp/');//设置保存路径
ini_set('session.gc_maxlifetime',60);//保存1分钟
setcookie(session_name(),session_id(),time()+6,"/");//设置会话cookie的过期时间
说明:
(1)关闭浏览器不会使一个Session结束,但会使这个Session永远无法访问。因为当用户打开新的浏览器窗口又会产生一个新的Session。
(2)Session对象不是一直有效,默认有效期为24分钟。
(3)增加Session的有效期会导致Web服务器保存用户Session的信息的时间增长,如果访问的用户很多,会加重服务器负担。
(4)不能单独对某个用户的Session设置有效期。
删除和销毁Session
删除Session常用来实现用户注销的功能,使得用户能够安全退出网站。
session_unset();//删除$_SESSION中所有session变量
session_destroy();//清除Session ID
说明:
(1)session_unset函数只能删除$_SESSION[]中的所有元素,不能删除对应的Session ID,也不能删除保存Session ID的文件。
(2)session_destroy函数只能删除Session ID,并销毁Session文件,但是不能删除$_SESSION[]中的所有元素。
(3)unset()方法也可以删除单个Session变量。
利用Session限制未登入用户访问(演示代码)
//login.php
<html>
<head>
<title>登入</title>
</head>
<body>
<?php
session_start();
if(!isset($_POST["login"])){
echo '
<form action="#" method="post">
<p>帐号:<input type="text" name="name"/></p>
<p>密码:<input type="password" name="pw"/></p>
<p><input type="submit" name="login" value="登入"/>
</form> ';
}
else{
$name=$_POST["name"];
$pw=$_POST["pw"];
if($name=="admin"&&$pw==123456)
{
$_SESSION["name"]=$name;
$_SESSION["pw"]=$pw;
echo '登入成功,<a href="test.php">查看个人信息</a>';
}
else{
echo '帐号或密码错误!<a href="JavaScript:history.back()">返回登入</a>';
}
}
?>
</body>
</html>
//test.php
<?php
session_start();
if(isset($_SESSION['name'])){
echo "帐户信息:<br/>";
echo "用户名:".$_SESSION["name"]."<br/>";
echo "密码:".$_SESSION["pw"]."<br/>";
echo '<a href="logout.php?action=logout">注销</a>';
}else{
echo '未登入用户不允许访问,<a href="login.php">请登入</a>';
}
?>
//logout.php
<?php
if($_GET['action']=="logout"){
header('Refresh:3; url="login.php"');
session_start();
setcookie("cookiename", NULL);
session_unset();
session_destroy();
echo "三秒后返回登入页面";
}
?>
运行截图