匿名用户设计

匿名用户设计:网站用户不需要登录可以实现登录用户的操作(除去扣费的功能外)
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。之前的匿名数据成垃圾数据了.可以根据标识符和时间写定期清理脚本

 

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

 
 
 

你可能感兴趣的:(用户)