一段时间后取消设置会话

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'.那么我如何实现后台工作呢?

Thi*_*key 9

什么是会话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:

session.cookie_lifetime指定发送到浏览器的cookie的生命周期(以秒为单位).

但是,必须在服务器端而不是客户端处理销毁会话.将session.cookie_lifetime设置为0将使会话的cookie按照会话cookie的方式运行,即会话cookie仅在浏览器关闭之前有效.

虽然这种方法有点繁琐,但它更优雅.

啊,找到了我很久以前读过的链接!:30分钟后如何使PHP会话失效?