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