天天看點

匿名使用者設計

匿名使用者設計:網站使用者不需要登入可以實作登入使用者的操作(除去扣費的功能外)

匿名使用者設計

mail varchar(60) #使用者名     

istemp  tinyint(1) #是否是匿名  

假設登入使用者是郵箱賬号,匿名使用者設計能保證唯一的非郵箱字元。匿名使用者的操作資料産生和登入使用者的業務流程一樣,使用者登入後隻需要替換掉使用者名(mail),辨別符(istemp)清空匿名cookie/session即可,登入使用者session和匿名session隻能存在一個。匿名的資料用session或cookie存儲(存mail即可)當産生一個匿名的session或cookie後就不産生新的匿名cookie/session值了。如登入是$_session['user'] 匿名是$_session['tmpuser'];

匿名使用者設計

<?php  

@session_start();  

include_once 'inc/users.class.php';  

if (isset($_cookie['users']) && !empty($_cookie['users'])) {  

    $user = new users();  

    $userdata = authcode(urldecode($_cookie['users']), 'decode', appkey);  

    $arr = explode(':', $userdata, 2);  

    $data = unserialize($arr[1]);  

    $mail = $data['mail'];  

    if (strpos($mail, '@') > 0) {  

        $userdetail = $user->getuserinfobymail($mail);  

        $tmpmail = $user->getsitetmpuser($mail, $_get ['sid']);  

        if ($tmpmail) {  

            $userdetail['tmpmail'] = $tmpmail;  

            $mail = $tmpmail;  

        }  

        $user = $_session['users'] = $userdetail;  

    } else {  

        $_session['tmpusers'] = $data;  

        $_session['tmpusers']['isguest'] = 1;  

        $user = $_session['tmpusers'];  

    }  

}  

if (!isset($_session['tmpusers']) && !isset($_session['users'])) {  

    $mail = getsalt() . random(30);  

    $key = authcode(serialize(array('mail' => $mail)), 'encode', appkey, time() + 30);  

    setcookie('users', $key, time() + 3600, '/');  

2 如果使用者故意不登入清掉cookie後,再通路回産生新的cookie。之前的匿名資料成垃圾資料了.可以根據辨別符和時間寫定期清理腳本

常見應用:匿名購物車功能