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

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。之前的匿名数据成垃圾数据了.可以根据标识符和时间写定期清理脚本
常见应用:匿名购物车功能