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

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。之前的匿名資料成垃圾資料了.可以根據辨別符和時間寫定期清理腳本
常見應用:匿名購物車功能