注册PHP会话变量


Registering PHP Session Variable

我正在尝试创建一个简单的登录表单。我有session_start();作为页面上加载的第一个内容。我有一个文件login.php,其中包含登录相关的代码,这是通过一个ajax调用处理时,单击登录按钮。它包含:

if ($_GET['cemail']) {
$email = $_GET['cemail']; 
$password = md5($_GET['cpassword']); 
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) { 
    session_register("email");
}
else {
    echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
}
}

当我点击Login按钮时,我得到这个警告:

警告:session_register() [function。在/home/clicker/public_html/hstrier - rbochner/login.php的第82行

中,无法发送会话缓存限制器-头已经发送(输出开始于/home/clicker/public_html/hstrier - rbochner/login.php:1)

第82行是session_register("email");

我还试图创建一个注销按钮,只是调用session_destroy(),但它给了我这个:

警告:session_destroy() [function。试图销毁/home/clicker/public_html/hstri- rbochner/login.php中第66行未初始化的会话

我在这里做错了什么?我试着把session_start()放在不同的地方。任何帮助/想法吗?谢谢。

你需要:

  1. 将session_start()放在代码的开始部分
  2. 不要使用session_register(),这是一个过时的函数,替换为$_SESSION['foo'] = 'baa';
  3. destroy session:


    session_start ();session_destroy ();

  4. 您的web应用程序容易受到SQL注入攻击。

关于您的注销按钮问题。你必须先开始你的会话

<?php
//logout.php
session_start();
session_destroy();
echo "Logouted"

代替

  session_register()
使用

   $_SESSION['email'] = ''; 

我通过将所有php代码放在页面的最开头来使其工作

从我在session_register() PHP文档(链接)中读到的,似乎session_register()已被弃用,而$_SESSION["email"] = "email@example.com";是PHP 4.1.0的新方法。

一个代码示例将是(我不确定这是否有效,但它应该引导你在正确的方向);

<?php
    if ($_GET['cemail']) {
        $email = $_GET['cemail']; 
        $password = md5($_GET['cpassword']); 
        $sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
        $result = mysql_query($sql);
        if (mysql_num_rows($result) >= 1) { 
            $_SESSION['email'] = $email;
        }
        else {
            echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
        }
    }
?>

对于登出,您将执行:

<?php
    session_start(); 
    session_destroy();
?>

<?php
    session_start();  
    if(isset($_SESSION['email']))
        unset($_SESSION['email']); 
?>

在执行print或echo之前移动session_register