匿名用户设计

简介:
匿名用户设计:网站用户不需要登录可以实现登录用户的操作(除去扣费的功能外)
Java代码   收藏代码
  1. mail varchar(60) #用户名     
  2. istemp  tinyint(1) #是否是匿名  

假设登录用户是邮箱账号,匿名用户设计能保证唯一的非邮箱字符。匿名用户的操作数据产生和登录用户的业务流程一样,用户登录后只需要替换掉用户名(mail),标识符(istemp)清空匿名cookie/session即可,登录用户session和匿名session只能存在一个。匿名的数据用session或cookie存储(存mail即可)当产生一个匿名的session或cookie后就不产生新的匿名cookie/session值了。如登录是$_SESSION['user'] 匿名是$_SESSION['tmpuser'];

Java代码   收藏代码
  1. <?php  
  2. @session_start();  
  3. include_once 'inc/Users.class.php';  
  4. if (isset($_COOKIE['users']) && !empty($_COOKIE['users'])) {  
  5.     $user = new Users();  
  6.   
  7.     $userdata = authcode(urldecode($_COOKIE['users']), 'DECODE', APPKEY);  
  8.   
  9.     $arr = explode(':', $userdata, 2);  
  10.   
  11.     $data = unserialize($arr[1]);  
  12.     $mail = $data['mail'];  
  13.     if (strpos($mail, '@') > 0) {  
  14.         $userdetail = $user->getUserInfoByMail($mail);  
  15.         $tmpmail = $user->getSiteTmpUser($mail, $_GET ['sid']);  
  16.         if ($tmpmail) {  
  17.             $userdetail['tmpmail'] = $tmpmail;  
  18.             $mail = $tmpmail;  
  19.         }  
  20.         $user = $_SESSION['users'] = $userdetail;  
  21.     } else {  
  22.         $_SESSION['tmpusers'] = $data;  
  23.         $_SESSION['tmpusers']['isguest'] = 1;  
  24.         $user = $_SESSION['tmpusers'];  
  25.     }  
  26. }  
  27.   
  28. if (!isset($_SESSION['tmpusers']) && !isset($_SESSION['users'])) {  
  29.     $mail = getsalt() . random(30);  
  30.     $key = authcode(serialize(array('mail' => $mail)), 'ENCODE', APPKEY, time() + 30);  
  31.     setcookie('users', $key, time() + 3600'/');  
  32. }  

2 如果用户故意不登录清掉cookie后,再访问回产生新的cookie。之前的匿名数据成垃圾数据了.可以根据标识符和时间写定期清理脚本

 

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

相关文章
|
C#
WPF技术之Window.Resources
Window.Resources是在WPF中用于声明和定义资源的机制。通过将资源放置在Window.Resources中,我们可以在窗口内的任何位置引用这些资源,从而实现资源的共享和重用。
1181 0
|
缓存 Linux 调度
Docker介绍
Docker介绍
462 0
|
Java Shell Spring
java.lang.reflect.InaccessibleObjectException: Unable to make
java.lang.reflect.InaccessibleObjectException: Unable to make ... This exception occurs in a wide variety of scenarios when running an application on Java 9.
8109 0
|
Java 定位技术 API
标准坐标系与火星坐标系(高德)百度坐标系之间互转
这里先给大家介绍几个坐标系: 1.WGS84:国际坐标系,为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。2.GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。
4445 0
|
前端开发 JavaScript API
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Nuxt3框架中页面和布局的过渡效果设置方法,以及首屏加载动画的添加。通过配置nuxt.config.ts文件和添加CSS样式,可以实现页面过渡效果。同时,文章也提到了在页面中设置不同的过渡效果和为布局和页面同时设置过渡效果的方法。最后,文章以一个Github仓库链接和一个线上预览地址作为总结,表示遵循官方文档操作即可完成相关设置。
440 0
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
|
安全 算法 编译器
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
【10月更文挑战第30天】在.NET 9 中,AOT(Ahead-of-Time)编译技术在支持老旧的 Windows 7 和 XP 系统方面取得了显著进展。主要突破包括:性能提升(启动速度加快、执行效率提高)、部署优化(无需安装.NET 运行时、减小应用程序体积)、兼容性保障(编译策略优化、依赖项管理改进)以及安全性增强(代码保护机制)。这些改进使得应用程序在老旧系统上运行更加流畅、高效和安全。
535 2
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
1119 2
|
人工智能 NoSQL Redis
如何将分布式锁性能提升100倍【含面试题】
如何将分布式锁性能提升100倍
745 0
|
JSON 小程序 C#
微信网页授权之使用完整服务解决方案
微信网页授权之使用完整服务解决方案

热门文章

最新文章