用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>';//如果没有登录,一个登录超链。
}

解决方案 »

  1.   

    安全与否,是看你写的代码,和cookie没有关系,关键是看你怎么应用cookie
      

  2.   

    +1
    把密码写进cookie的话,那啥都不用问了
      

  3.   

    没有密码,只有用户名,系统是wordpress,cookie是wordpress自动生成的,我只是利用它。在判断用户是否登录时,要用这个用户名到用户数据库里进行查询,如果存在,用户已登录,如果没有,用户已登出。就是不知道坏人能不能伪造cookie,做些坏事,所以请教各位大神。
      

  4.   

    我经常伪造cookie原来我是坏人啊 
      

  5.   

    现在基本上都要封装一下,变成class,然后实例化对象,也就是传说中的OOP方式
    这样的方式写出来的代码容易后期维护.
      

  6.   

    最好加个检验用的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));
    }
    }