0

我发现 php 中的会话有点令人困惑,你们中的任何人都可以向我解释一下。我有一个在我的情况下不起作用的示例:我以这种方式注册会话,你能告诉我这是注册会话的正确方式吗

 //this is the page from where i register myusername in sessions
if($count==1){
    session_start();
    $_SESSION['myusername'] = $_POST['myusername']; 
    include("enterpincover.php");
}
else {
    echo "Wrong Pin";
}

在这里我首先检查用户名是否在会话中注册以便打开他的帐户,否则再次打开登录。

它可以工作,如果用户未登录,它将显示正确的登录页面,如果用户已登录,它会显示欢迎消息,但不会显示我想要的欢迎用户名。例如:欢迎大卫

<?php
session_start();
if(isset($_SESSION['myusername']))
{
    echo 'Welcome '.$_SESSION['myusername']; 
}
else
{
    include("leftmodules.php");
    include("rightmodules.php");
    include("login.php");
}
?>
4

2 回答 2

3

使用$_POSTor注册会话时$_GET,您应该检查这些变量是否存在。

示例

if(isset($_POST['myusername'])) $_SESSION['myusername'] = $_POST['myusername'];
else die("Undefined \"myusername\"");

如果您打算在 MySQL 查询中使用 session 中的变量,则应在放入 session(或 cookie,或任何其他变量)之前对其进行转义。使用mysql_real_escape_string().

示例

$_SESSION['myusername'] = mysql_real_escape_string($_POST['myusername']);

此外,请始终将您放在session_start()脚本的顶部,在所有其他输出或您的脚本不起作用之前(您会收到headers already sent警告)。

于 2012-07-06T08:29:30.897 回答
0

session_start() 应该在使用会话的页面的最顶部 - 就在<?php 设置会话正确并检查之后。但我想你没有进入 if 部分,因为 $count 是 0 (你告诉它用于检查用户名是否在会话中注册。如果它进入 if,你可以尝试简单地提醒一些东西。

回声'警报(“测试”);';

我想你只需要 session_start() 在文档的顶部。

于 2012-07-06T08:29:42.970 回答