【问题标题】:Session doesn't work in PHP会话在 PHP 中不起作用
【发布时间】:2014-05-07 18:01:36
【问题描述】:

我有两个文件,一个名为 Get_url.php 的文件,另一个名为 Next.php 的文件。但是,会话对我不起作用 - 会话值不会被记住。我做错了什么?

这是我的 Get_url.php 代码:

<!DOCTYPE html>

<html>
<body>
<?php
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

//connection
$con= mysql_connect("splasjcom.ipagemysql.com","splasj","Password") or die ("Could not connect");
mysql_select_db("splasj") or die ("Could not select db");

$query = "SELECT id FROM articles WHERE url = '". curPageURL() . "'";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)) {
 $idie = $row['id'];

 $Next = $idie +1;
 }
$queryy = "SELECT url FROM articles WHERE id = '$Next'";
$resultt = mysql_query($queryy);

while($roww = mysql_fetch_array($resultt)) {
 $idiee = $roww['url'];

 echo $idiee;
}

session_start();
$_SESSION['Get_url']=$idiee;
?>




</body>
</html>

这是我的 Next.php 代码:

<!DOCTYPE html>

<html>
<body>
<?php include ('Get_url.php');
echo $idiee;
session_start();
echo $_SESSION['Get_url'];
?>
</body>
</html>

【问题讨论】:

  • 这里面有什么?--> $variable
  • 您是否将值设置为$variable
  • 这个示例代码永远不会工作。您可能想发布您的真实代码,以便我们了解实际情况。
  • 是的,$variable = "这是一个变量";这行得通。
  • 如果会话完全使用 cookie,您希望在将任何输出发送到浏览器之前调用它。看us1.php.net/manual/en/function.session-start.php

标签: php session variables


【解决方案1】:

您首先需要为 $variable 设置一个值

在 Hey.php 中

<?php
session_start();
$variable = 'test';
$_SESSION['hey']=$variable;
?>

【讨论】:

  • 我是否必须更改 Hello.php 中的任何内容?因为当我尝试这个时,我得到'testest'作为输出......
  • 不,Hello.php 文件应该呈现 $_SESSION['hey'] 中保存的内容
  • 我使用了 hey.php 和 hello.php,在 hey.php 中将 $variable 设置为“test”后,我能够在 hello.php 上看到“test”
【解决方案2】:

这里有两个问题。首先,您需要在向客户端发送任何输出之前启动会话。例如,您的文件应该这样开始:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

如果你反其道而行之(在会话开始之前发送DOCTYPEHTML),那么 PHP 会发送所有待处理的 HTTP 标头,然后是内容。凭借 HTTP 协议的工作方式,一旦发送了任意数量的内容,您就无法重新发送标头。因此,延迟会话开始(需要设置 cookie 标头)将不起作用。

您的第二个问题是您在 Get_url.php 中调用 session_start(),然后在 Next.php 中调用 include()ed,它也有一个 session_start()。当您调用第二个 session_start() 时,它会用新的 session_id 覆盖第一个会话。

总之:

  1. session_start()向用户输出数据之前
  2. 一次只有一个session_start()。如果您必须包含另一个可能具有 session_start() 的文件,您可能需要使用以下内容:

    $sid = session_id();
    if(empty($sid)) session_start();
    

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2017-02-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多