(五)session的产生、使用与管理
一个最简单的使用session的例子,就是将相关的session数据从一个页面传递(注意:实际传递的是session id)到另一个页面,本网站中多次使用。
类似于下面的代码:
/*a.php*/
<?php
session_start();
$_SESSION['a'] = 'test';
?>
<a href="b.php">b.php</a>
/*b.php*/
<?php
session_start();
echo $_SESSION['a']; /*test*/
?>
这样就可以实现简单的参数在页面间的传递。(注意要在文件的第一行添加session_start())
session的应用
(1)超时重新登录
session_start();
if(isset($_SESSION['expiretime'])) {
if($_SESSION['expiretime'] < time()) {
unset($_SESSION['expiretime']);
$_SESSION = array(); //清除SESSION值.
if(isset($_COOKIE['name'])){ //判断客户端的cookie文件是否存在,存在的话将其设置为过期.
setcookie('name','',time()-1,'/');
}
session_destroy(); //清除服务器的sesion文件
echo "<script >alert('登录超时,请重新登录!' );location='login.php';</script>";
exit(0);
} else {
$_SESSION['expiretime'] = time() + 600; // 刷新时间戳
}
}
避免用户忘记注销时别人进入网站对信息进行操作。
(2)避免重复登录
/*登陆成功时设置session,储存post的用户名*/
$_SESSION['username'] = $_POST["username"];
/*点击进入界面时会检测是否设置了该session*/
session_start();
if(isset($_SESSION['username']))/跳转登录时检测是否已设置该session
{
echo "<script>alert('您已登录!');location='firstpage.php';</script>";
exit(0);
}
(3)注销清空session
$_SESSION = array(); //清除SESSION值.
if(isset($_COOKIE['name'])){ //判断客户端的cookie文件是否存在,存在的话将其设置为过期.
setcookie('name','',time()-1,'/');
}
session_destroy();
用户点击注销时清空session和cookie
session的安全性
通常针对session的攻击:
当用户访问某一个网站是,服务器会产生一个cookie-phpsessid,因为服务器及时通过这个cookie-phpsessid来辨别用户的,所以只要攻击者获得这个cookie-phpsessid,就可以伪装成正常用户对网站进行破坏。
加强安全性:
可以通过修改请求头部信息,如果客户端通过PHPSESSID传递相关的session标识符,可以将PHPSESSID放在cookie头部中进行传递;同样地,客户端也可以将session标识符放在请求的url中进行传递。
或者可以在头部中加入不是必需的信息,例如:
GET / HTTP/1.1
Host: example.org
Cookie: PHPSESSID=12345
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Accept: text/html;q=0.9, */*;q=0.1
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Accept-Language: en
如果浏览器发送了这些头部信息到服务器,那无疑接下来的请求中头部会带有这些信息,在一定程度上可以加强安全性,但是如果头部信息不同也不能完全确定该请求来自攻击者,此时就需要设置一个密码在这个时候来让用户输入进行检测。
第一次请求时,将user-agent加密后,存进session里,以后的每次请求都会比对user-agent与session里的useragent,如果不同的话就要输入密码进行验证。
具体的关于session安全可以参照:
https://www.freebuf.com/articles/web/10369.html#