【问题标题】:Is it Security Safe to Destroy and unset a session like this in php在php中销毁和取消设置这样的会话是否安全?
【发布时间】:2013-06-22 00:18:39
【问题描述】:

像这样销毁和取消设置会话是否安全? 它是否遵循编码标准?

我正在为一个网站实现 Logout 脚本。用户登录后,并成功设置会话 session_name("website_sess") session_start();

这是用户单击注销按钮时调用的脚本

if ( ( isset($_SESSION['firstsessionname']) ) 
    && ( !empty($_SESSION['firstsessionname']) ) ) {
        $_SESSION['firstsessionname'] = '';
}

if ( ( isset($_SESSION['secondsessionname']) ) 
    && ( !empty($_SESSION['secondsessionname']) ) ){
        $_SESSION['secondsessionname'] = '';
}

if ( ( isset($_SESSION['thirdsessionname']) ) 
    && ( !empty($_SESSION['thirdsessionname']) ) ){
        $_SESSION['thirdsessionname'] = '';
}

if ( ( isset($_SESSION['fourthsessionname']) ) 
    && ( !empty($_SESSION['fourthsessionname']) ) ){
        $_SESSION['fourthsessionname'] = '';
}


session_name("website_sess");
session_start();

session_unset();
$_SESSION[]=array();
session_destroy();
session_regenerate_id(TRUE);

安全吗? session_regenerate_id(TRUE) 应该在那里吗?销毁所有会话后。

【问题讨论】:

  • 这绝对是矫枉过正
  • kyle,你说它是好是坏?很担心,我不确定是否应该在它被销毁后重新生成它,因为我仍然会在另一个页面上再次启动会话。
  • 如果您将$_SESSION 设置为一个空数组,则不需要任何这些 if 语句。销毁会话后,就是这样 - 当您在下一页开始新会话时,我希望它会自动具有不同的 ID,因此您也不需要重新生成。另一件值得注意的事情:您的$_SESSION[]=array(); 行只是添加了一个新密钥。您可能打算输入 $_SESSION = array(); 代替(注意缺少方括号)。
  • 您很可能收到了 E_NOTICES,因为在 session_start 之前 $_SESSION 是未定义的;你的如果永远不会发生

标签: php


【解决方案1】:

正如@KyleK 所说,这远远超出了您的需要。查看session_regenerate_id docs 的参数部分。

<?php
// Generate a new session ID and delete the old data while we're at it
session_regenerate_id(true);

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2013-04-17
    • 2012-05-25
    • 2011-11-06
    相关资源
    最近更新 更多