session,cookie及购物车相关

本文详细介绍了PHP中的Session机制,包括Session的存储方式、如何在客户端禁用Cookie时使用URL传输SessionID、Session注销流程、购物车实现方案及SessionID的安全防护措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,session默认依文件形式存放在服务器上,用sessionid加前缀的方式命名此session文件。当调用session_start()使启用session,此时会生成一个sessionid。用session_regenerate_id()函数可以生成sessionid
注:用户向服务器请求的时候,在请求的头信息中会set_cookie,服务器端会根据获得的sessionid到对应的session文件中取得session数据然后返回给客户端。所以当第一次请求是不会有sessionid给服务器端,只是在第一次会生成一个sessionid,当第二次请求的时候会发送这个sessionid。
注:sessionid在客服端是存放在session cookie name中的(php默认的是PHPSESSID,可以在php.ini中修改),即:sessionid在客服端依cookie的方式存放

2,如果客服端禁用cookie的话,虽然session是依赖cookie中的sessionid的,但是sessionid可以明文传输的,比如在url中加?PHPSESSID=session_id()。session_name()函数可以获取 session cookie name,默认的话即是PHPSESSID。

php.ini中的session.use_trans_sid设置为ON即可,但是会有一定的安全性,攻击者可以发送包含会话 ID 的 URL 给受害者, 例如:http://example.com/page.php?PHPSESSID=123456789


3,注销session:
session_destroy();// 第一步: 删除服务器端session文件,这使用
setcookie(session_name(),'',time()-3600);// 第二步: 删除实际的session:
$_SESSION = array();// 第三步: 删除$_SESSION全局变量数组
4,购物车的实现
一般的方法是:放在cookie中(安全性问题),放在session中(session文件过大),放在数据库中(加大数据库的负载)
可以通过会话id即sessionid,同时把session放到redis或memcached中,通过sessionid到nosql中去取得数据。

5,防止伪造sessionid
可以在登陆验证成功后,重新生成一个sessionid
<?php
     
     
if(!isset($_SESSION['user_agent'])){
  $_SESSION['user_agent'] = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
}
/* 如果用户session ID是伪造 */
elseif ($_SESSION['user_agent'] != md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'])) {
  session_regenerate_id();
}
?>
注:在服务器端加再加一个user_agent的session,这个session是用户的ip和浏览器的md5加密值,判断是否是这个用户。


session和cookie的区别见http://news.tuxi.com.cn/kf/article/mnnpj.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值