PHP $_SESSION 变量不持有

Posted

技术标签:

【中文标题】PHP $_SESSION 变量不持有【英文标题】:PHP $_SESSION variables not holding 【发布时间】:2015-05-10 23:57:48 【问题描述】:

显然,我不擅长这些东西,但我想尝试变得更好。我有一个未婚夫和我的婚礼网站,但我遇到了麻烦。我在索引上有一个简单的登录,它通过登录页面、登录确认页面并返回到索引。它将保存表单中的 $_SESSION['name' 变量,在 mysql 中确认,返回索引而不是其他任何地方。即使在刷新该页面时,它也会消失。

index.php

  <div id="login">
        <span class="login">
            <form action="login.php" method="post" id="loginform">
                <label for="name">User:</label>
                <input type="text" name="name" id="name" size="12">
                <label for="password">Password:</label>
                <input type="password" name="password" id="password" size="12">
                <input type="submit" value="submit" id="submit">
                <input type="button" value="hide" id="hide" onclick="loghide()">
            </form>
        </span>
    </div>
    <br />
    <div id="logged">
        <?php
if (isset($_SESSION['username']))
echo "<script      type='text/javascript'>document.getElementById('logged').style.cssText='opacity:1;-webkit-transition:1s;-moz-transition:1s;-o-transition:1s;-ms-transition:1s;transition:1s;';</script>";
echo "<script    type='text/javascript'>document.getElementById('login').style.cssText='display:none;';</script>";
      
?>
        <span class="logged">
                <ul id="adminlinks">
                    <div id="event">
                        <div id="hiddenlinks">
                            <li><a class="links" id="hidden2"     href="events.html">index</a></li>
                            <br />
                            <li><a class="links" id="hidden3"      href="events.html">our story</a></li>
                            <br />
                        </div>
                        <li><a class="links">update</a></li>
                    </div>
                    <li><a class="links" href="addphotos.php">add     photos</a></li>
                       <li><a class="links" href="<?php session_destroy(); header("Location:index.php"); ?>">Log Out</a></li>
                </ul>
        </span>
    </div>
</div>
<div id="bottom">
    <span class="foot">july fourth, two thousand and fifteen</span>
</div>
</div>

<?php
echo $_SESSION['username'];
echo $myusername;
?>

登录.php

////deleted mysql connection stuff
session_start();
$_SESSION['username']=$myusername;
$_SESSION['password']=$mypassword; 
header("location:login_success.php");

else 
echo "Wrong Username or Password";

?>

login_success.php

<?php
session_start();
if (!isset($_SESSION['username']))
echo "nope";
 else header("location:index.php");

?>

我在这些页面的顶部有 session_start()'s 膨胀。它会在那里工作,但然后移动到我的下一个管理链接它不会。我有回声 $_SESSION['username'];在底部查看是否已注册。

它托管在 GoDaddy 上,它确实将会话内容保存在 root/tmp 文件夹中,因此它有一个路径。我很茫然。

对于菜鸟有什么想法吗?

这不是一个重要的登录或任何事情,因为它只是我或我的未婚夫登录以更新图片或其他东西,但想自己做并让它变得更好。

谢谢,马特

Edit-Index.php 和 addphotos.php 有 session_start();在页面顶部。

我称之为下一个管理链接是 addphotos.php 与索引基本相同,其他内容稍后添加。

双重编辑 - 将加密密码。如果没有 $_SESSION 变量,会有更好的方法来完成任务吗?如果只设置了 $_SESSION['username'] 而没有设置密码呢?

FINAL-好的,谢谢大家!明白了,正在改进。

【问题讨论】:

您需要将session_start() 添加到您希望使用会话变量的索引页面和每个页面。您正在检查会话变量而不启动会话。 您可以尝试print_r($_SESSION); exit; 以查看 SESSION 变量的状态。如果它没有填满你的值,你可能忘记像@JayBlanchard 所说的那样开始会话,或者你正在取消设置某个地方的变量。 智者之言;不要在会话中存储重要信息。听说过会话劫持吗?另外,不要以纯文本形式存储密码。如果您要使用此功能进行直播,您将被黑客入侵。 @Fred-ii- 确实是明智的Ralph “这不是一个重要的登录或任何事情,因为它只是我或我的未婚夫登录以更新图片” - 相信我,那里有些人会嗅出像这样的网站,就像我之前说的那样,你会被黑客入侵。所以,我会重新考虑这一点,并使用一个适当的登录系统,使用准备好的语句和强大的密码散列函数。我经常看到这种情况。 【参考方案1】:

你必须调用 session_start();在索引页面上为了在那里使用它,会话被保留,只是你需要告诉程序启动会话,所以它会使用在那里找到的值。 将以下代码放在 index.php 文件的第一行:

<?php session_start(); ?>

希望对你有帮助。

【讨论】:

【参考方案2】:
<a class="links" href="<?php session_destroy(); header("Location:index.php");?>">Log Out</a>

这不是创建指向此代码的链接,您实际上是在运行它!创建一个包含此代码的logout.php 页面,然后链接到该页面。这就是您的会话被破坏的原因。您还需要在所有使用会话的页面上使用session_start()

【讨论】:

另外,请注意大家对安全的看法。尽管会话劫持对于您的网站来说极为罕见,但学习如何正确登录和会话是每个开发人员都需要知道的事情,您现在可能已经知道 :-)

以上是关于PHP $_SESSION 变量不持有的主要内容,如果未能解决你的问题,请参考以下文章

取消设置具有相似名称的所有会话变量

PHP 超级全局变量

PHP SESSION 机制

PHP:如何访问已在其外部声明的函数内部的变量?

根据sessionID判断用户是否登陆

Session 入库