【问题标题】:cookieless authentication in php5php5中的无cookie身份验证
【发布时间】:2011-03-13 15:00:06
【问题描述】:

在我的 PHP 应用程序中,我使用 UserName & Pwd 并检查数据库中的用户表来检查用户的有效性。登录成功后,我将凭据存储在服务器会话中,如下所示:

$_SESSION['username'] = $username;
$_SESSION['pwd'] = $pwd;

我检查了会话以确保用户已经登录。您可以看到下面的代码:

if (empty($_SESSION['userId']))
    header("Location: login.php");

问题是如果我在浏览器中禁用了cookie,即使登录成功,我也无法进入另一个页面。我发现,PHP 会话使用 cookie 在浏览器中存储一些值。无论如何在 PHP5 中使用 cookieless 会话?

【问题讨论】:

    标签: php session authentication cookieless


    【解决方案1】:

    您可以生成一个会话 ID,然后像这样将其添加到您的链接中

    <?php
    session_start();
    $session_id = session_id();
    header('Location: http://www.test.com/?sess_id='. $session_id);
    ?>
    

    【讨论】:

    • 你必须在你的 login.php 中像这样处理这个 if(!empty($_GET['sess_id'])) { //code is it the admin? }
    【解决方案2】:

    是的,您可以通过启用session.use_trans_sid。但是,这样做存在安全问题。

    人们普遍认为,为了登录,需要接受一个 cookie。

    另一种选择是使用 http 授权而不是会话,尽管这也有它的缺点。

    session id passing

    【讨论】:

      【解决方案3】:

      是的,但你不想这样做。事实上,您应该使用基于 cookie 的会话。这是 PHP 5.3 的默认配置。请阅读session fixation 了解更多信息。

      您在哪些情况下迫使您要求用户能够在没有 cookie 的情况下使用您的网站?

      【讨论】:

        【解决方案4】:

        可以,但您需要将sessidsid 附加到每个链接。

        这里有详细描述: http://myles.eftos.id.au/blog/2005/11/26/cookie-less-sessions-in-php/

        您还需要像这样更改php.iniphp_value session.use_trans_sid = 1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-12
          • 2011-09-02
          • 1970-01-01
          相关资源
          最近更新 更多