今天在工做中,遇到了这样一个问题。关于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