【问题标题】:how to pass session_id() throught out the php pages?如何在整个 php 页面中传递会话 id()?
【发布时间】:2010-05-15 11:13:32
【问题描述】:

当用户点击 login button(index.php) 我正在调用 chechlogin.php 我正在检查 loginId 的密码 as-

if($count==1)
{
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$_SESSION['UserId'] = $myusername;
$_session['SessionId'] = session_id();
header("location:LoggedUser.php");
}

LiggedUser.php

<?php session_start();  //starting session

如果 (!isset($_SESSION['SessionId']) || $_SESSION['SessionId'] == '') { 标头(“位置:index.php”); } ?>

问题:虽然我输入了正确的用户名和密码,但它总是返回 index.php 页面。我认为 session_id() 无法正常工作或??

【问题讨论】:

  • 您是否也在 index.php 和 checklogin.php 中调用 session_start()
  • 是的,在第一行我在两个页面中都调用 session_start() ......这是个问题。
  • @Piyush:不,你必须这样做;)
  • PHP 中的变量名区分大小写。 $_SESSION 和 $_session 是不同的变量。
  • Plyush 请注意 Piotr 的回答,您在代码中使用的大多数行都是无用的。特别是用于将会话 ID 写入会话

标签: php session sessionid


【解决方案1】:

将 $_session 更改为 $_SESSION。

btw session_register 已弃用,不应使用。详见session-register手册。

顺便说一句#2。你不需要在$_SESSION中存储sessionId,UserId就足够了。所以你的代码可能看起来像:

登录.php

if ($count == 1) {
    $_SESSION['UserId'] = $myusername;
    header ("location: LoggedUser.php");
    exit;
}

loggeduser.php

if (empty ($_SESSION['UserId'])) {
    header ("location:login.php");
    exit;
}

// user is logged 

编辑: 按照 Emil 的建议添加了退出。

【讨论】:

  • 我需要 sessionId 怎么办?
  • session_id() 只要是同一个会话,就会为每个页面返回相同的 ID。
  • 我将会话 ID 存储在数据库中,这就是我需要它的原因,我认为在我调用 session_start() 的每个页面中...这就是为什么 session_id() 不起作用,是吗??
  • 您必须在每个页面上使用 session_start()。 SessionID 存储在用户 cookie 中,因此每个页面上的 ID 都是相同的,除非浏览器关闭。
【解决方案2】:

考虑在每次调用header('Location: ...') 后调用exit;。否则 PHP 会继续解析剩下的代码,这可能会导致不可预知的错误。

header("Location: LoggedUser.php");
exit;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多