技术文库项目的最新浏览记录和记住登陆状态的COOKIE加密存储

今天在工做中,遇到了这样一个问题。关于COOKIE的加密储存;下面介绍下,如何实现最新浏览记录:用户的最新浏览记录分为:用户登陆和用户未登陆的状况;用户登陆后,除了写COOKIE,还要存储在数据表当中,为了保证用户在其余的电脑上登陆,仍然可以查看以前的浏览记录。代码以下: php

static public function setUserNewBroswer($id,$data){
		$tempNumber = 10;
		$data = $id."|".safe_replace($data);
                $user_info = $_SESSION['login_user'];
                $user_arr  = explode("|", $user_info);
                $user_id   = $user_arr[1];
                $user_name = $user_arr[0];
                $cookie_name = "wk_search".(empty($user_id)?"":base64_encode($user_id."+".$user_name."+"));
		$user_search_record = isset($_COOKIE[$cookie_name]) ? explode(",",trim(base64_decode(trim($_COOKIE[$cookie_name],",")))) : array();
                if(count($user_search_record) >= $tempNumber){
			array_shift($user_search_record);
                        if(!in_array(trim($data),$user_search_record)){
                             $user_search_record[] = $data;
                        }
		}else{
                          if(!in_array(trim($data), $user_search_record)){
                                $user_search_record[] = $data;
                          }
		}
              $cookie_value = base64_encode(implode(",",$user_search_record));
		setcookie($cookie_name,$cookie_value,time()+3600*24*30,"/");
		if(!empty($user_info)){
			$user_arr = explode("|", $user_info);
			$user_id  = $user_arr[1];
			$search_cookie = serialize($user_search_record);
			$dblink = new DataBase("");
			$exist = Wk::isExistUserSearch($user_id);
			if($exist){
				$dblink->query("UPDATE wk_search SET user_search='$search_cookie' WHERE user_id='$user_id'");
			}else{
				$dblink->query("INSERT INTO wk_search(user_id,user_search) VALUES('$user_id','$search_cookie')");
			}
		}
	}
那么获取COOKIE的代码以下:

static public function getUserNewBrowser(){
		$user_info = $_SESSION['login_user'];
		$user_arr  = explode("|", $user_info);
		$user_id   = $user_arr[1];
              $user_name = $user_arr[0];
		$dblink = new DataBase("");
		if($user_info){
			$rs = $dblink->getRow("SELECT user_search FROM wk_search WHERE user_id='$user_id'");
                        if(!empty($rs)){
                                return unserialize($rs[0]['user_search']);
			}else{
				return array();
			}
		}else{
                     $cookie_name = "wk_search".(empty($user_id)?"":base64_encode($user_id."+".$user_name."+"));
			$cookie = base64_decode(trim($_COOKIE[$cookie_name],","));
			return $cookie ? explode(",", $cookie) : array();
		}
	}
须要注意的地方:

      <1>序列化存储的时候,用于须要保存最新的10条数据记录,则须要数据表的对应的字段的长度足够大,不然,会出现serialize序列化后的字符串不完整的状况。 cookie

     <2>在字符串入列的时候,注意清除字符串左右两边的空格。 加密

    <3>在使用base64_encode()进行加密的时候,在获取cookie的时候,须要清除字符串左右两边的空格。 spa

    <4>对于页面显示的倒序,在调用的模板页面,利用array_reverse就能够。 code

相关文章
相关标签/搜索