天天看点

匿名用户设计

匿名用户设计:网站用户不需要登录可以实现登录用户的操作(除去扣费的功能外)

匿名用户设计

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。之前的匿名数据成垃圾数据了.可以根据标识符和时间写定期清理脚本

常见应用:匿名购物车功能