用cookie检查用户是否登录,是否安全?

mumubangditu 2013-01-03 04:25:15
用cookie检查用户是否登录,是否安全?

$cookies =  $_COOKIE["wordpress_logged_in_".md5("http://localhost/wp")];
$userinfo = explode('|',$cookies);
$db = mysql_connect("localhost","root","root");
mysql_select_db("wp",$db);
mysql_query("SET NAMES utf8");
$result = @mysql_query("SELECT user_login FROM wp_users where user_login ='".mysql_real_escape_string($userinfo[0])."' limit 1");
$total = mysql_num_rows($result);
mysql_close($db);
if($total>0){
echo 'hello: '.$userinfo[0]);
}else{
echo '<a href="http://localhost/wp/login.php"'>Login</a>';//如果没有登录,一个登录超链。
}
...全文
544 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mumubangditu 2013-01-05
  • 打赏
  • 举报
回复
试试LS的代码。
幽烛 2013-01-05
  • 打赏
  • 举报
回复
最好加个检验用的cookie用于检验cookies是否被修改(欺骗); 简单步骤如下: 1.用户id或用户名写入cookie,名A 2.将用户id或用户名使用如下方法加密后写入cookie,名B 3.在需要判断登录的地方,解密下B,判断是否同A即可 分享代码:

       /**
	 * 安全代码
	 * @param string $string 要处理的文本
	 * @param string $operation 处理方式(DECODE:解码,ENCODE:编码)
	 * @param string $key 密匙
	 * @param int $expiry 过期时间
	 * @return string
	 */
	function oauthCode($string, $operation = 'DECODE', $key = '', $expiry = 0)
	{
		$ckey_length = 4;
		$key  = md5($key != '' ? $key : '31415926');//默认密钥
		$keya = md5(substr($key, 0, 16));
		$keyb = md5(substr($key, 16, 16));
		$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
		$cryptkey = $keya.md5($keya.$keyc);
		$key_length = strlen($cryptkey);
		$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
		$string_length = strlen($string);
		$result = '';
		$box = range(0, 255);
		$rndkey = array();
		for($i = 0; $i <= 255; $i++)
		{
			$rndkey[$i] = ord($cryptkey[$i % $key_length]);
		}
		for($j = $i = 0; $i < 256; $i++)
		{
			$j = ($j + $box[$i] + $rndkey[$i]) % 256;
			$tmp = $box[$i];
			$box[$i] = $box[$j];
			$box[$j] = $tmp;
		}
		for($a = $j = $i = 0; $i < $string_length; $i++)
		{
			$a = ($a + 1) % 256;
			$j = ($j + $box[$a]) % 256;
			$tmp = $box[$a];
			$box[$a] = $box[$j];
			$box[$j] = $tmp;
			$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
		}
		if($operation == 'DECODE')//解密
		{
			if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16))
			{
				return substr($result, 26);
			} 
			else 
			{
				return '';
			}
		}
		else
		{
			return $keyc.str_replace('=', '', base64_encode($result));
		}
	}
chen_ya_ping 2013-01-04
  • 打赏
  • 举报
回复
登录不检查密码?
www_7di_net 2013-01-04
  • 打赏
  • 举报
回复
引用 6 楼 mumubangditu 的回复:
引用 5 楼 sibang 的回复:不要相信任何来自客户端的内容. 说实话,你这代码写的可真丑啊! 传说……漂亮的代码该怎么写?
现在基本上都要封装一下,变成class,然后实例化对象,也就是传说中的OOP方式 这样的方式写出来的代码容易后期维护.
mumubangditu 2013-01-03
  • 打赏
  • 举报
回复
引用 5 楼 sibang 的回复:
不要相信任何来自客户端的内容. 说实话,你这代码写的可真丑啊!
传说……漂亮的代码该怎么写?
www_7di_net 2013-01-03
  • 打赏
  • 举报
回复
不要相信任何来自客户端的内容. 说实话,你这代码写的可真丑啊!
ImN1 2013-01-03
  • 打赏
  • 举报
回复
我经常伪造cookie。。。原来我是坏人啊
mumubangditu 2013-01-03
  • 打赏
  • 举报
回复
引用 1 楼 yunprince 的回复:
安全与否,是看你写的代码,和cookie没有关系,关键是看你怎么应用cookie
引用 2 楼 snmr_com 的回复:
+1 把密码写进cookie的话,那啥都不用问了
没有密码,只有用户名,系统是wordpress,cookie是wordpress自动生成的,我只是利用它。 在判断用户是否登录时,要用这个用户名到用户数据库里进行查询,如果存在,用户已登录,如果没有,用户已登出。 就是不知道坏人能不能伪造cookie,做些坏事,所以请教各位大神。
ImN1 2013-01-03
  • 打赏
  • 举报
回复
引用 1 楼 yunprince 的回复:
安全与否,是看你写的代码,和cookie没有关系,关键是看你怎么应用cookie
+1 把密码写进cookie的话,那啥都不用问了
yunprince 2013-01-03
  • 打赏
  • 举报
回复
安全与否,是看你写的代码,和cookie没有关系,关键是看你怎么应用cookie

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧