Ass*_*Guy 5 php session background
我正在建立一个在线机票预订网站.在这里我做了以下事情:用户用他们的座位号搜索公交车.使用座位号更新数据库temp_seat_book = 'Y'.如果他预订机票付钱,他的状态将更新为final_ticket_book = 'Y'.现在我要删除的领域temp_seat_book = 'Y',但
final_ticket_book = 'N'.为此,我需要删除超过10分钟的session_ids final_ticket_book = 'N'.那么我如何实现后台工作呢?
什么是会话cookie而不是搜索文件(涉及更多的i/o)等.会话Cookie
更好的方法是在$ _SESSION变量中存储"最近活动"的时间戳.
并在每个请求上更新会话数据(包括自动定期ajax调用,如果有的话).
让我们说你想在10分钟后取消会议,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
Run Code Online (Sandbox Code Playgroud)
为了避免像会话固定这样的攻击:(会话修复是一种攻击,允许攻击者劫持有效的用户会话)继续定期重新生成会话ID 5分钟(我建议保持再生时间以及会话到期时间a多一点).更精细的攻击列表:攻击列表.
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
Run Code Online (Sandbox Code Playgroud)
此外,请确保session.gc-maxlifetime设置为您要使用的最长过期时间.你可以这样做
ini_set('session.gc-maxlifetime', 600)
Run Code Online (Sandbox Code Playgroud)
或者直接在php.ini中设置它.
并且
session.cookie_lifetime指定发送到浏览器的cookie的生命周期(以秒为单位).
但是,必须在服务器端而不是客户端处理销毁会话.将session.cookie_lifetime设置为0将使会话的cookie按照会话cookie的方式运行,即会话cookie仅在浏览器关闭之前有效.
虽然这种方法有点繁琐,但它更优雅.
啊,找到了我很久以前读过的链接!:30分钟后如何使PHP会话失效?
| 归档时间: |
|
| 查看次数: |
13211 次 |
| 最近记录: |