注册PHP会话变量

时间:2011-08-06 01:38:59

标签: php session-variables

我正在尝试创建一个简单的登录表单。我有session_start();作为页面上加载的第一件事。我有一个文件login.php,其中包含登录相关代码,当单击Login按钮时,该代码通过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>";
}

}

当我点击“登录”按钮时,我收到此警告:

  

警告:session_register()[function.session-register]:无法发送会话缓存限制器 - 已在/ home /中发送的报头(在/home/clicker/public_html/hstrial-RBochner/login.php:1处开始输出)第82行上的clicker / public_html / hstrial-RBochner / login.php

第82行是session_register("email");

的行

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

  

警告:session_destroy()[function.session-destroy]:尝试在第66行的/home/clicker/public_html/hstrial-RBochner/login.php中销毁未初始化的会话

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

5 个答案:

答案 0 :(得分:5)

你需要:

  1. 将session_start()放入代码的开头
  2. 不使用session_register(),是一个过时的函数,替换为$ _SESSION ['foo'] ='baa';
  3. 破坏会话:

    在session_start();
    session_destroy();

  4. 您的网络应用程序易受SQL injection攻击。 - 检查best way to stop SQL Injection in PHP

答案 1 :(得分:1)

关于您的退出按钮问题。你必须先开始你的会议

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

而不是

  session_register()

仅使用

   $_SESSION['email'] = ''; 

答案 2 :(得分:0)

从我在session_register() PHP文档(link)上可以阅读的内容看来,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']); 
?>

答案 3 :(得分:0)

我通过将所有php代码放在页面的最开头来实现它。

答案 4 :(得分:-1)

在执行print或echo之前移动session_register。