首页 文章

PHP登录会话无法在没有缓存的新窗口中加载第一页

提问于
浏览
1

我正在努力从头开始创建一个网站,目前我正在讨论会话内容 . 我一般都知道会话如何工作以及如何将事情存储到 $_SESSION 之后 session_start() 但我的主要问题是这个 . 清除缓存并打开一个新窗口后,提交登录请求第一次不能正确提交并且页面重新加载并且没有任何更改,但是在第一次之后,它工作正常...我的login.php处理a)发布请求,或b)通过网址登录(用于测试目的),以便将"user/login.php?username=facebook&method=get"的链接发送到下面的代码,并将用户设置为使用名称facebook登录 .

<?php
session_start();
$method = $_GET['method'];
if($method == "get") $_SESSION['username'] = $_GET['username'];
else $_SESSION['username'] = $_POST['username'];
header('Location: http://www.imggroups.com');
?>

我不确定这是否重要,但是,在索引页面上,我检查用户是否通过这样做登录 . 明显开始 Session ,然后做 . if(isset($_SESSION['username'])) echo 无论我需要什么登录..否则回显任何未登录.....

3 回答

  • 2

    如果这是login.php的总数,我相信有更简单的方法可以做到这一点:

    • 如果用户名实际上是通过_GET还是_POST进入并不重要,那么请使用_REQUEST,因为它封装了两者 .
    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_REQUEST['username'];
    }
    
    • 如果它确实重要,您不必信任或使用外部参数,只需查看其中的内容:
    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_POST['username'];
    } else if( isset($_GET['username'] ) {
        $_SESSION['username'] = $_GET['username'];
    } else {
        // whinge
    }
    

    我之前没有遇到过这个问题,但你也可以做一个session_write_close();强制它在重定向到另一页之前写出会话 .

  • 1

    问题是您将用户重定向到新页面,但旧页面尚未完成关闭,因此会话尚未保存 .

    为了解决这个问题,我通常会设置一个重定向到正确页面的interum页面 .

    或者,您可以在使用标头重定向之前使用session_write_close()(http://www.php.net/manual/en/function.session-write-close.php)

  • 0

    事实是,它正在设置会话,但它会将您重定向到不允许会话的其他域 . 如果您访问没有“www”的网站 . 在前面然后被重定向到www版本,然后它会说你的会话不存在 . 使用以下内容:

    session_set_cookie_params(0, '/', ".imggroups.com");
    

    把它放在 session_start() 之前,它适用于您网站的www和非www版本 .

相关问题