【问题标题】:Setting secure session cookies in php在 php 中设置安全会话 cookie
【发布时间】:2016-04-08 08:15:50
【问题描述】:

设置会话 cookie 的语法

session_set_cookie_params($lifetime, $path, $domain, $secure, true);

第一季度。像下面这样设置会话 cookie 是安全的还是还有更多工作要做?

session_set_cookie_params('3600', 'www.example.com', isset($_SERVER["HTTPS"]), true);

第二季度。设置会话(从安全角度)cookie 的理想生命周期应该是多长?

第三季度。如果我决定将我的网络管理文件夹转移到子域,那么上面的代码是否需要更改?

【问题讨论】:

    标签: php security session cookies session-cookies


    【解决方案1】:
    define('SESSION_EXPIRE',3600*6);
    
    define('SESSION_EXPIRE_RELOAD',1800);
    
    ini_set('session.gc-maxlifetime',SESSION_EXPIRE);
    
    ini_set('session.name','prl');
    
    ini_set('session.cookie_httponly',true);
    
    ini_set('session.cookie_secure',false);
    
    session_set_cookie_params(SESSION_EXPIRE);
    
    session_start();
    

    [How do I expire a PHP session after 30 minutes?

        sessionRegenerate(){
            if (!isset($_SESSION['SESSION_CREATED']))
            {
                $_SESSION['SESSION_CREATED'] = time();
            } 
            else if (( SESSION_EXPIRE -(time() - $_SESSION['SESSION_CREATED']) ) < SESSION_EXPIRE_RELOAD && ( SESSION_EXPIRE -(time() - $_SESSION['SESSION_CREATED']) ) > 0 ) 
            {
                session_regenerate_id(true);
                $_SESSION['SESSION_CREATED'] = time();
            }
        }
    

    【讨论】:

      【解决方案2】:

      A1:您上面的代码看起来很理想,只要它遵循 PHP 文档页面,我们还能说谁;

      A2:这完全取决于它的用途。在银行业,有些人喜欢在不活动的几分钟内终止会话。在游戏或社交网络中,这些设置往往更加宽松和宽松,以便给用户更多的回旋余地;

      A3:是的,您必须更改 cookie 以反映新的子域管理员更改。如果您想设置一个全局 cookie(适用于所有子域):

      session_set_cookie_params('3600', 'example.com', (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')? true : false, true);
      

      希望这会有所帮助!

      【讨论】:

      • 谢谢伙计。 Q2。它将用于电子商务应用程序。
      • 如果您不保存任何重要信息(信用卡号、DOB、SSN 等),我建议允许用户选择“记住我”选项,该选项可能会在 3 内失效天?否则,一旦会话不再出现在页面上,就终止会话。
      • 您的 A1 和 A3 是我希望的,但 Q2。仍然需要我做一些研究......
      • 小心isset($_SERVER["HTTPS"]);它可以破坏 IIS。请考虑使用isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] !== 'off' : falsestackoverflow.com/a/7304205/2224584
      • 谢谢@ScottArciszewski,我不倾向于经常使用IIS,但是当我写下这些答案时,记住所有的可能性总是好的。相应地更新了我的答案:-)
      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 2015-05-22
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多