php设置cookie时报错
雪夜之狼 2007-11-14 05:41:10 我想写一个页面。当用户输入用户名和密码后,自动生成cdb_auth达到登录discuz论坛的效果,认证部分代码如下:
<?php
//$using_cookie = FALSE;
/**
* Passport 密匙处理函数
*
* @param string 待加密或待解密的字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 处理后的密匙
*/
function passport_key($txt, $encrypt_key) {
// 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
$encrypt_key = md5($encrypt_key);
// 变量初始化
$ctr = 0;
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for($i = 0; $i < strlen($txt); $i++) {
// 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
// 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
// 返回 $tmp 的值作为结果
return $tmp;
}
/**
* Passport 解密函数
*
* @param string 加密后的字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 字串经过私有密匙解密后的结果
*/
function passport_decrypt($txt, $key) {
// $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
// 经过 passport_key() 函数处理后的返回值
$txt = passport_key(base64_decode($txt), $key);
// 变量初始化
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for ($i = 0; $i < strlen($txt); $i++) {
// $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
// 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
$tmp .= $txt[$i] ^ $txt[++$i];
}
// 返回 $tmp 的值作为结果
return $tmp;
}
/**
* Passport 加密函数
*
* @param string 等待加密的原字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 原字串经过私有密匙加密后的结果
*/
function passport_encrypt($txt, $key) {
// 使用随机数发生器产生 0~32000 的值并 MD5()
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
// 变量初始化
$ctr = 0;
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for($i = 0; $i < strlen($txt); $i++) {
// 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
// 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
// 返回结果,结果为 passport_key() 函数返回值的 base64 编码结果
return base64_encode(passport_key($tmp, $key));
}
switch ($action) {
case 'login' :
default:
$user_login = '';
$user_pass = '';
if ( $_POST ) {
$user_login = $_POST['log'];
//$user_login = sanitize_user( $user_login );
$user_pass = $_POST['pwd'];
//$rememberme = $_POST['rememberme'];
$authkey="0df31b4cVmSp59qC";
echo "usr:".$user_login."<br>pwd:".$user_pass;
echo "<p>Encode auth:";
$pwd=$user_pass;
$string="0";
$string=passport_encrypt($pwd,$authkey);
echo "<br>".$string."</br>";
echo "</p>";
setcookie("cdb_auth",$string,time()-1);
echo "<p>Login?";
$login=0;
$login=isset($_COOKIE["ief_auth"]);
echo "<br>state:".$login."</br>";
echo "<br>auth:".$_COOKIE["ief_auth"]."</br>";
echo "</p>";
}
?>
<?php
break;
} // end action switch
?>
但是,当我提交数据后,却报错:
usr:admin
pwd:admin
Encode auth:
UmRaYwZsA21Qaw==
Warning: Cannot modify header information - headers already sent by (output started at /www/users/wowtigu.org/pri/login/checkusr.php:107) in /www/users/wowtigu.org/pri/login/checkusr.php on line 116
Login?
state:
auth:
无法设置cookie
我是php新手,能指导下吗?谢谢~!
另:登录页面代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0094)http://www.wowtigu.org/app/wordpress/wp-login.php?redirect_to=%2Fapp%2Fwordpress%2Fwp-admin%2F -->
<HTML lang=zh-CN dir=ltr xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>登录</TITLE>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<LINK
href="wp-admin.css" type=text/css rel=stylesheet>
<!--[if IE]>
<STYLE type=text/css>#login H1 A {
MARGIN-TOP: 35px
}
#login #login_error {
MARGIN-BOTTOM: 10px
}
</STYLE>
<![endif]--><!-- Curse you, IE! -->
<SCRIPT type=text/javascript>
function focusit() {
document.getElementById('user_login').focus();
}
window.onload = focusit;
</SCRIPT>
<META content="MSHTML 6.00.3790.4134" name=GENERATOR>
</HEAD>
<BODY class=login>
<DIV id=login>
<H1><A title="Powered by The ivy Guild Union" href="http://www.wowtigu.org/">a</A></H1>
<FORM id=loginform name=loginform action=checkusr.php method=post>
<P><LABEL>用户名:<BR><INPUT class=input id=user_login tabIndex=10 name=log></LABEL> </P>
<P><LABEL>密码:<BR><INPUT class=input id=user_pass tabIndex=20 type=password name=pwd></LABEL></P>
<P class=submit>
<INPUT id=wp-submit tabIndex=100 type=submit value="登录 »" name=wp-submit>
<INPUT type=hidden value=pri/ name=redirect_to>
</P>
</FORM>
</DIV>
<UL>
<LI><A title=走错地方了? href="http://www.wowtigu.org/">返回</A></LI>
</UL>
</BODY>
</HTML>
这段代码是改的wordpress的登录界面的 呵呵
在线等~