Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\浏览器关闭时会话cookie未过期_Php_Session_Jquery Mobile_Cookies - Fatal编程技术网

Php $\浏览器关闭时会话cookie未过期

Php $\浏览器关闭时会话cookie未过期,php,session,jquery-mobile,cookies,Php,Session,Jquery Mobile,Cookies,这是我的代码,如果单击“记住我”,它将发送一年的过期时间。 如果没有,则将会话_set _cookie _params()设置为0。这意味着它应该在浏览器关闭时销毁会话。然而,由于某些原因,它并不是这样工作的 这是我的登录页面: session_start(); if (isset($_POST['username']) && isset($_POST['password'])) { if (($_POST['username'] == $user) &&

这是我的代码,如果单击“记住我”,它将发送一年的过期时间。 如果没有,则将会话_set _cookie _params()设置为0。这意味着它应该在浏览器关闭时销毁会话。然而,由于某些原因,它并不是这样工作的

这是我的登录页面:

session_start();
if (isset($_POST['username']) && isset($_POST['password'])) {

    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) {

    if (isset($_POST['rememberme'])) {
        $_SESSION['username'] = $user;
        $_SESSION['start'] = time();
        $_SESSION['expire'] = $_SESSION['start'] + (60*60*24*365);
}
    else{
        $_SESSION['username'] = $user;
        session_set_cookie_params(0);
    }
    header('Location: index.php');

} else {
    $p->addContent('<font color = red>Wrong</font>');
}
}

在您的代码中,
session\u set\u cookie\u params()
在任何情况下都不会被调用。因此,我建议:

session_set_cookie_params(0);
session_start();

if (isset($_POST['username']) && isset($_POST['password'])) {
...
注意,对于会话cookie调用
session\u set\u cookie\u params()
总是非常有用

在每次用户级别更改时生成新会话ID

为了保护您的应用程序免受攻击者的攻击,绝对需要在每次更改用户角色后更改sessionID:

  • 匿名用户->登录用户
  • 登录用户->匿名用户
  • 登录用户->管理登录用户
因此,如果用户登录或注销,请重新生成会话ID,如下所示:

session_regenerate_id( true );
看一看他的书

定期删除会话文件

使用PHP的标准会话策略,会话映射到常规文件,即所谓的会话文件。如果用户关闭浏览器,会话文件将继续存在于文件系统中。很可能,操作系统将每天删除一次会话文件(夜间)

因此,如果用户一天后回来,sessionID cookie将指向一个会话文件,该文件可能不再可用

公共PC的案例


另外,想象一个运行在公共PC上的浏览器:如果用户关闭浏览器,一个新用户登录,另一个用户将自动登录。

这很简单<代码>会话设置cookie参数(0)session_start()后调用时,code>不会影响会话

只需将代码重新排序如下:

if (isset($_POST['username']) && isset($_POST['password'])) {
    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) {
        if (isset($_POST['rememberme'])) {
            session_start();
            $_SESSION['username'] = $user;
            $_SESSION['start'] = time();
            $_SESSION['expire'] = $_SESSION['start'] + (60*60*24*365);
        } else {
            session_set_cookie_params(0);
            session_start();
            $_SESSION['username'] = $user;
        }
    header('Location: index.php');
    } else {
        session_start();
        $p->addContent('<font color = red>Wrong</font>');
    }
} else {
    session_start();
}
if(isset($\u POST['username'])和&isset($\u POST['password'])){
如果($发布['username']=$user)&($发布['password']=$pass)){
如果(isset($_POST['rememberme'])){
会话_start();
$\会话['username']=$user;
$\u会话['start']=time();
$\会话['expire']=$\会话['start']+(60*60*24*365);
}否则{
会话设置cookie参数(0);
会话_start();
$\会话['username']=$user;
}
标题('Location:index.php');
}否则{
会话_start();
$p->addContent(“错误”);
}
}否则{
会话_start();
}
编辑:


session\u set\u cookie\u params
只对当前脚本起作用,并且每次使用
session\u start()
时都必须再次调用,这也毫无意义。设置cookie以指示是否应该使用它可能会很有用。

这不会在所有情况下都将会话设置为在浏览器退出时关闭。我不想那样。我只希望在未单击“记住我”时将其设置为0。非常感谢所有这些,这是不必要的。但我会通读一遍:)@AnujHari不客气!PHP安全备忘单是很有价值的阅读资料!该死,我以为这会管用的。我觉得很对,哈哈。我关闭了浏览器,返回index.php,但会话仍在运行。:/几乎被困在这里了。
if (isset($_POST['username']) && isset($_POST['password'])) {
    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) {
        if (isset($_POST['rememberme'])) {
            session_start();
            $_SESSION['username'] = $user;
            $_SESSION['start'] = time();
            $_SESSION['expire'] = $_SESSION['start'] + (60*60*24*365);
        } else {
            session_set_cookie_params(0);
            session_start();
            $_SESSION['username'] = $user;
        }
    header('Location: index.php');
    } else {
        session_start();
        $p->addContent('<font color = red>Wrong</font>');
    }
} else {
    session_start();
}