5

我在 php 中很新,并尝试使用 cookie,但它在我的网站中没有工作,任何人都可以指导我,我的代码出了什么问题:

<?php
session_start();
?>
<script>
function Redirect(url)
{
 location.href = url;
}

</script>
<?php 

define('_VALID_ACCESS', true);
include_once "includes/connect.php";
include_once "includes/login.php";


if(empty($_POST['loginname']) || empty($_POST['password']))
{
    $msg = "User or password is empty";
}
else
{
    if(login($_POST['loginname'], $_POST['password']) == true)
    {
        $usern = $_POST['loginname'];
        session_register('loginname');
        $loginname = $usern;        
        sleep(1);
            if(activestatus($_POST['loginname'], $_POST['password']) == true)
            {
            $usern = $_POST['loginname'];
            session_register('loginname');
            $loginname = $usern;        
            sleep(1);

            $hour = time() + 3600;
            setcookie("ID_my_site", $_POST['loginname'], $hour);
            setcookie("Key_my_site", $_POST['password'], $hour); 
            $test = $_COOKIE["ID_my_site"];
            $msg = "<script> Redirect ('home.html?testname=".$test."')</script>"; 
             //header("Location: home.html"); 
            }
            else
            {
            $msg = "<script> Redirect ('valid.php?testname=".$usern."')</script>"; 
            }

    }
    else
    {
        $msg = "<font color=red>User or Password is wrong</font>";
    }
}
echo '<div id="divTarget">' . $msg . '</div>'; 
?>
  <link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection">
  <link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print">
  <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection">  
 <body>
 <div class="container" id="login_container">
<form id="login" action="action.php" method="post" name="loginform" >
    <fieldset id="login_screen"  style="width:350px">
        <label id="login_label" for="login">User Login </label> 
        <br><br>
        <label for="login">Email Address</label>
        <input type="text" name="loginname" id="loginname" value="email@coolmates.com">    
        <p id="space"><label for="password">Password</label>
        <input type="password" id="password" name="password"  value="********" ></p>
        <input type="checkbox">Keep me signed in until i signout
        <p id="test"><input type="submit" value="Submit"></p>
        <a href="forgetpassword.html">Forgot
        your password</a>&nbsp;&nbsp;|<span id="free">Not a member?</span><a href="regForm.html">Sign up</a><blink><span id="free">Free</span></blink> 
        </p>
    </fieldset>
</form> </div>
</body>
4

4 回答 4

6

打开 display_errors 并将您的 error_reporting 设置为 E_ALL,您应该会看到有关“已发送标头”的错误消息 - 您必须在发送任何 HTML 之前调用 setcookie()。来自 php.net/setcookie:

setcookie() 定义了一个 cookie 与其余的 HTTP 标头一起发送。与其他标头一样,必须在脚本的任何输出之前发送 cookie(这是协议限制)。这要求您在任何输出之前调用此函数,包括和标记以及任何空格。

在您发布此位的代码块中:

<script>
function Redirect(url)
{
 location.href = url;
}

</script>

在您尝试设置 cookie 之前就直接输出到浏览器。

您的两种可能性是使用输出缓冲,以便在最后输出所有内容,或者切换到一种方法,其中所有处理代码首先在一个脚本中执行,然后设置 $_SESSION 和 cookie 值,然后包含第二个第一个脚本的末尾包含要输出到浏览器的代码。

于 2009-05-19T02:15:24.840 回答
3

试试这个(指定您网站的根目录):

setcookie("ID_my_site", $_POST['loginname'], $hour,'/');

或试试这个(在您的登录名中添加引号):

setcookie("ID_my_site", "$_POST['loginname']", $hour,'/');
于 2009-05-19T01:31:37.610 回答
2

第一个你不需要 session_register,你可以这样做。

由于 session_register 是自 4.1.0 以来的首选方法,自 PHP 5.3 起已弃用

$_SESSION["loginname"] = $_POST["loginname"]

第二,如果您要使用会话,您的流程可能会更好,因为这不起作用。

$_SESSION["foo"] = 1;
header("Location: stuff.php");

然后就无法在 stuff.php 中查看会话数据。您可以将用户发送到主页,并在那里进行身份验证,如果通过,则您只需继续加载主页,如果没有,则将用户发送回登录像这样的页面。

if($_SESSION["authenticated"] == 0)
{
    header("Location: login.php");
    die();
}
于 2009-05-13T10:19:19.323 回答
1

此外,您不应该将密码存储为 cookie 数据——这是一个很大的安全性不可以!!!

如果您想做类似的事情,请设置一个唯一的 - 随机 - 标识符,当他们登录并使用它时会更改(您仍然应该使用 MD5)

于 2009-05-31T23:11:57.813 回答