【问题标题】:session_set_cookie_params() not working with session_set_save_handler() [duplicate]session_set_cookie_params() 不能与 session_set_save_handler() [重复]
【发布时间】:2020-10-09 23:24:17
【问题描述】:

我正在尝试更改默认会话 cookie 参数。为了存储会话数据,我使用 mysql 和 session_set_save_handler()

这是Session类的构造函数

    public function __construct(){
    // Instantiate new Database object
    $this->db = new Database;

    // Set handler to overide SESSION
    session_set_save_handler(
    array($this, "_open"),
    array($this, "_close"),
    array($this, "_read"),
    array($this, "_write"),
    array($this, "_destroy"),
    array($this, "_gc")
    );

    // Start the session

    session_set_cookie_params(time() + (86400 * 30),"/","",true,true);
    session_start(); 
}

如果session_set_cookie_param() 行设置在session_start() 之后,我会遇到此错误

PHP Warning:  session_set_cookie_params(): Cannot change session cookie parameters when session is active

session_start() 之前我没有错误但没有设置cookie。并且当该行被删除时,会话 cookie 使用默认 php 数据“PHPESSID”和 exptime = Session 成功设置。

session_start() 行之前的 session_status() 等于 1 (PHP_SESSION_NONE)

如果我在session_set_save_handler() 之前设置参数,则不会设置任何cookie。

【问题讨论】:

  • 我已仔细阅读该帖子并添加行 regisster_shutdown_function() 不能解决问题。是的,我之前尝试过设置 cookie 参数,但也不起作用
  • 虽然我不相信这是引用问题的重复,但上面链接的原始问题的答案有帮助吗?如果没有,请在您的问题中添加详细信息(edit),我们可以重新打开它。干杯
  • 您似乎也只有四个可选值中的三个,“路径”、安全、httponly。您也可以添加域值...
  • 是的,我试过session_set_cookie_params(time() + (86400 * 30),"/","",true,true);
  • 我已经解决了,在构造函数和cookie中添加了几行参数,这是新的构造函数;

标签: php session-cookies


【解决方案1】:

在开始会话之前检查它是否已启动

session_status ( void ) : int
session_status() 用于返回当前会话状态。

如果会话被禁用,则 PHP_SESSION_DISABLED。
PHP_SESSION_NONE 如果会话已启用,但不存在。
PHP_SESSION_ACTIVE 如果会话已启用且存在一个。

<?php
/**
* @return bool
*/
function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ){
 session_start();
}
?>

【讨论】:

  • 大家好,session_start() 函数前面的session_status1 == PHP_SESSION_NONE
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 2013-03-12
  • 1970-01-01
  • 2014-02-17
  • 2018-01-10
  • 1970-01-01
  • 2011-03-09
  • 2012-12-07
相关资源
最近更新 更多