我是非常新的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> |<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>
答案 0 :(得分:6)
启用display_errors并将error_reporting设置为E_ALL,您应该看到有关“已发送的标题”的错误消息 - 您必须在任何HTML SENT之前调用setcookie()。来自php.net/setcookie:
setcookie()定义了一个cookie 与HTTP的其余部分一起发送 头。像其他标题,饼干 必须在任何输出之前发送 你的脚本(这是一个协议 限制)。这需要你 在此之前调用此函数 任何输出,包括和 标签以及任何空格。
在您发布此位的代码块中:
<script>
function Redirect(url)
{
location.href = url;
}
</script>
在您尝试设置Cookie之前,将直接输出到浏览器。
您的两种可能性是使用输出缓冲,以便您输出最后的所有内容或切换到一个方法,在该方法中,您首先在一个脚本中执行所有处理代码,然后设置$ _SESSION和cookie值,然后在第一个脚本的尾端包含第二个脚本,该脚本包含要输出到浏览器的代码。
答案 1 :(得分:3)
试试这个(指定网站的根目录):
setcookie("ID_my_site", $_POST['loginname'], $hour,'/');
或尝试此操作(在您的登录名中添加引号):
setcookie("ID_my_site", "$_POST['loginname']", $hour,'/');
答案 2 :(得分: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();
}
答案 3 :(得分:1)
此外,您不应该存储密码是cookie数据 - 这是一个很大的安全性否 - 不是!!!
如果你想做类似的事情设置一个唯一的 - 随机 - 标识符,当他们登录时会改变它并使用它(你应该还是MD5)