周六. 4月 20th, 2024

关于会话处理

HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的 请求无关,但是为了能够调整用户特有的行为和首选项,出现了一种在客户端存储少量信息(常称为cookie)的实践,但由于 cookie 大小的限制、所允许的 cookie 数量以及 cookie 的实现上的各种不一致,出现了另外一种解决方案:会话处理。

会话处理的实现方式是为每位网站访问者分配一个称之为会话 ID(SID)的唯一标识属性,然后将此 SID 与任意数量的数据关联。

开始会话

session_start();

创建会话变量

$_SESSION[‘username’] = “jason”;

删除会话变量

unset($_SESSION[‘username’]);

简单的登入登出

[code lang=”php”]

$supervisor = “admin”;
$superpsw = “passwd”;

// 检查是否提交表单
if (isset($_POST[‘superadmin’]))
{
if (!($_POST[‘supername’] == $supervisor) || !($_POST[‘superpass’] == $superpsw))
{
echo “用户名或密码错误”;
exit;
}
else
{
session_start();
$_SESSION[“superlogin”] = $_POST[‘supername’];
}
} else {
session_start();
// 检查是否设置了会话变量,即是否已经登入,如果没有,显示登入页面
if (! isset($_SESSION[“superlogin”]) )
{
echo “

“;
echo “

请输入管理员密码
“;
echo “管理员”;
echo “
“;
echo “密  码”;
echo “
“;
echo “
“;
echo “

“;
echo “

“;
exit;
}
}
// 由用户销毁会话变量,登出
if (isset($_GET[‘logout’])) {
unset($_SESSION[‘superlogin’]);
header(“Location:index.php”);
}

[/code]

假设将此文件命名为include.php,将其包含到要验证登入的页面即可,例如 index.php

<?php
require “include.php”;
?>
<html>
<head>
<title>管理</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
</head>
<body>
<p><a href=”index.php?logout=1″>登出</a>
<p>欢迎进入</p>
</body>
</html>

如此访问 index.php 页面时将进入登入页面,登录后显示 index.php 页面内容,这个过程一直持续到用户结束会话,如关闭浏览器或点击注销按钮,但是会话本身在PHP服务器有一个默认的生存期。

有效会话的持续时间由 php.ini 所控制,默认为1440秒,即24分钟

session.gc_maxlifetime = 1440

PS:本文是个范例,用简单的代码来做说明,实际应用中会采用更加复杂的控制机制。

作者 Chris

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据