当你想在服务器端保存少量关于用户的信息时使用session,通常用于识别用户。在这里,我将解释如何使用 PHP 使用session。
首先,让我简要介绍一下session。session类似于cookies,但是在cookies的情况下,你要管理的值存储在客户端,而session是在服务器端管理的。并且在客户端只保存标识正在使用哪个session的sessionID。在客户端使用 cookie 来存储此sessionID 是很常见的(因此,如果您使用session,您也会使用 cookie)
如果在客户端仅使用 cookie 来存储值,则可能可以窥探到它们。在session中,value在server端保存为session变量,所以在处理重要数据时尽量使用session。
让我们实际使用它。首先,当客户端第一次访问它时,需要创建一个新的session并启动session。为此使用 session_start 函数。
session_start
bool session_start()
---------------------------------------------------------------------------------
session_start() 创建一个session。或根据要求
基于当前session通过 GET、POST 或 cookie 传递的session ID
恢复当前session
退货:
始终返回 TRUE。
如果session尚未开始,我们要调用此函数,它将开始一个新session并分配一个sessionID。session ID 以 cookie 名称“PHPSESSID”存储在客户端。
如果有已经启动session的client(session ID保存为cookie的client)访问,即使使用这个函数,session也不会重新启动,而是保存在server端,只是准备了session变量供您使用。
<?php
session_start();
?>
示例代码
让我们实际尝试一下。首先我们启动一个session,看看session ID在客户端有没有写成cookie。
<?php
session_start();
?>
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
if (!isset($_COOKIE["PHPSESSID"])){
print('这是您的第一次访问。开始session。');
}else{
print('已经开始了session<br>');
print('session的ID是'.$_COOKIE["PHPSESSID"].' 。');
}
?>
</body>
</html>
如果将上述文件安装在WWW服务器上,通过浏览器查看,将显示如下。
启动session后,您可以将值存储在服务器端。为每个客户端写入各种值,但可以使用session ID 作为标识符来识别哪个客户端保存了该值。
存储在服务器端的值称为session变量。由于可以保存多个session变量,所以可以保存各种值。
要将值写入session变量,请使用 PHP 中的预定义变量“$_SESSION”。
$_SESSION[session的变量] = 値
例如,要将值写入session变量“visited”:
$_SESSION["visited"] = 1;
如果在客户端仅使用 cookie 来存储值,则可能可以窥探到它们。在session中,value在server端保存为session变量,所以在处理重要数据时尽量使用session。
示例代码
让我们实际尝试一下。首先启动一个session,并将值存储在session变量中。然后尝试在每次客户端访问同一主页时增加session变量。同时,我们会显示上次访问的日期和时间。
<?php
session_start();
?>
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
if (!isset($_SESSION["visited"])){
print('这是您的第一次访问。开始session。');
$_SESSION["visited"] = 1;
$_SESSION["date"] = date('c');
}else{
$visited = $_SESSION["visited"];
$visited++;
print('访问次数为'.$visited.'次。<br>');
$_SESSION["visited"] = $visited;
if (isset($_SESSION["date"])){
print('最后一次访问日期是'.$_SESSION["date"].'。<br>');
}
$_SESSION["date"] = date('c');
}
?>
</body>
</html>
如果将上述文件安装在WWW服务器上,通过浏览器查看,将显示如下。
您还可以删除保存的session变量。使用「unset」功能
unset
void unset ( mixed var [, mixed var [, mixed ...]] )
--------------------------------------------------------------------------------
unset() 销毁指定的变量。
参数:
var 要删除的变量
具体说明如下。
unset($_SESSION("visited"));
此外,要删除所有session变量,请在“$_SESSION”变量中存储一个空数组,如下所示。
$_SESSION = array();
※请不要删除“$_SESSION”变量本身。
其次,如果您想销毁session本身,例如通过处理注销。在这种情况下,删除客户端存储的session ID 后,销毁session。
Cookie 保存在客户端,所以删除它们。(有关删除 cookie 的信息,请参阅 “删除 Cookie ”)。
if (isset($_COOKIE["PHPSESSID"])) {
setcookie("PHPSESSID", '', time() - 1800, '/');
}
最后,销毁session注册的所有数据。使用“session_destroy”函数。
session_destroy
bool session_destroy(void)
---------------------------------------------------------
session_destroy()
销毁与当前session关联的所有数据。此函数不会破坏与session相关的任何全局变量。此外,
它不会破坏session的cookie。
返回:
成功返回 TRUE,失败返回 FALSE。
像这样使用它:
session_destroy();
示例代码
让我们实际尝试一下。
/******
sample.php
******/
<?php
session_start();
?>
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
if (!isset($_SESSION["visited"])){
print('这是您的第一次访问。开始session。');
$_SESSION["visited"] = 1;
$_SESSION["date"] = date('c');
}else{
$visited = $_SESSION["visited"];
$visited++;
print('访问次数为'.$_SESSION["visited"].'次。<br>');
$_SESSION["visited"] = $visited;
if (isset($_SESSION["date"])){
print('上次访问日期是'.$_SESSION["date"].'。<br>');
}
$_SESSION["date"] = date('c');
}
?>
<p>
<a href="./sessionlogout.php">LOGOUT</a>
</p>
</body>
</html>
/******
sessionlogout.php
******/
<?php
session_start();
?>
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
print('显示session变量列表<br>');
print_r($_SESSION);
print('<br>');
print('显示sessionID<br>');
print($_COOKIE["PHPSESSID"].'<br>');
print('<p>Logout</p>');
$_SESSION = array();
if (isset($_COOKIE["PHPSESSID"])) {
setcookie("PHPSESSID", '', time() - 1800, '/');
}
session_destroy();
?>
<p>
<a href="./sessionlogoutconfirm.php">确认退出</a>
</p>
</body>
</html>
/******
sessionlogoutconfirm.php
******/
<?php
session_start();
?>
<html>
<head><title>PHP TEST</title></head>
<body>
<?php
print('确认session变量。<br>');
if (!isset($_SESSION["visited"])){
print('访问的session变量未注册。<br>');
}else{
print($_SESSION["visited"].'<br>');
}
print('确认session ID。<br>');
if (!isset($_COOKIE["PHPSESSID"])){
print('session未注册。<br>');
}else{
print($_COOKIE["PHPSESSID"].'<br>');
}
?>
</body>
</html>
如果将上述文件安装在WWW服务器上,通过浏览器查看,将显示如下。