构建不依赖于cookie的手机端用户登录机制

详解前端登录方式 1. Cookie + Session 登录 1.1 概述 1.2 实现流程 1.3 特点 2. Token 登录 2.1 概述 2.2 实现流程 2.3 特点 2.4 Token生成方式 3. SSO 单点登录 3.1 概述 3.2 登录实现流程 3.3 退出实现流程 3.4 特点 4. OAuth 第三方登录 4.1 概述 4.2 实现流程 4.3 OAuth2.0基本流程 5. 使用场景 阅读详情

手机端登录网站的问题是一个困扰我很久的问题。总是会 有那么一些用户告诉我,他的手机不能登录网站了。要想能有效地解决手机登录的问题,一种方案就是尽可 能多地模拟出用户的手机端环境出来,针对这些具体的环境对代码进行测试和调整。另一种方案就是尽可能地让网站拜托对于客户端环境的依赖,创建更加健壮的代 码。

 

随着信息技术的发展,手机本身的硬件设备越来 越先进,功能也越来越全面,对于cookie的支持显然不成问题。不过,总还是有一部分人群在使用着比较低端 的手机。做为开发者来说,要能最大范围地满足不同手机用户的需求,就不得不考虑对于不支持cookie的手机的支持。否则,你可能不得不一遍又一遍地对用 户说,我们的网站支持带有cookie功能的手机,甚至还得对着用户解释半天什么是cookie。

 

那么,现在就来看看我们需要为创建不依赖于cookie的手机端用户登录机制需要做哪些准备。

 

一、了解php对于session机制的支持

php.ini中关于session的几个有用的字段:

 

session.use_trans_sid 通过开启这个参数,即可启用通过url参数传递sessionId的支持。默认值为0,不开启。

 

url_rewriter.tags 哪些地方需要用来传递sessionId。默认值 为”a=href,area=href,frame=src,input=src,form=fakeentry”,表示在标签a=href表示对于标签 a的href属性,要将sessionId附加上去。

 

session.use_cookies 默认的值是“1”,代表sessionId使用Cookie来传递,反之就是使用url参数来传递。如果 session.use_trans_sid=1,那么启用该选项,在客户端支持cookie的情况下,仍然使用cookie传递sessionId,在 检测到客户端不支持cookie的情况下,则会使用url参数传递sessionId。

 

session.name 这个就是SessionID储存的变量名称,默认为PHPSESSID

session.cookie_lifetime 这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭sessionId就作废。

 

session.gc_maxlifetime 这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除。

 

session.save_path session的保存路径。默认为/tmp。如果在路径前加2;则表示cookie的存储深度为2。比如如果session.sava_path=2; /tmp/session,那么sess_005c685e3ec4e0cf6b667245225299c8这个session就会保存在/tmp /session/0/0/这个目录下。

二、基本使用方法

新建一个session.php文件,代码为:

<a href=”hello.php”>hello</a>

最后输出来的时候链接地址无疑还是hello.php,那么,我们来增加几行代码,让它变得能支持传递sessionId。

<?
php
ini_set ('session.use_trans_sid ',1);
?>
< a href =”hello.php” > hello</ a >

在浏览器中看的时候,链接还是没有变化。怎么回事呢?原来服务器端在检测到浏览器端支持cookie的情况下,是不会开启url传递sessionId的。

不妨试试禁用浏览器的cookie。会发现效果依旧。这是怎么回事呢?

实际情况是,要让服务器支持替换链接地址,首先要让服务器能获取到sessionId。那么我们就要开启session才行。这时就要用到session_start函数了。再修改一下代码如下:

<?
php
ini_set ('session.use_trans_sid ',1);
session_start ();
?>
< a href ="/hello.php" > hello</ a > 刷新一下界面,发现生成的源代码已经变成如下的代码了。
<a href="/hello.php?PHPSESSID=f10962d83fdfb27b501b53e099916a90">hello</a>

那么恭喜,我们的目标已经基本完成了。

在前面的代码中,我们都是直接在代码中使用ini_set函数对php.ini的字段进行设置,这样做有什么好处呢?因为在实际的服务器环境中,可 能会运行多个网站,修改php.ini中的配置会直接影响到其他网站的运行,而是用在代码中设置则能在最大程度上削弱这种影响。

 

三、如何确保各种标签传递sessionId

在前面的例子中,我们已经能让a标签的href属性正确地附加上sessionId了。不过,在实际的开发中,可能会有更加复杂的情况。比如,你可能会用到form,也有可能用到iframe,甚至即使在使用图片的时候也需要传递sessionId。那么来看下面的代码:

<?
php
ini_set ('session.use_trans_sid ',1);
session_start ();
?>
< a href ="/hello.php" > hello</ a >
< form >
< input value ="submit" />
</ form >
< iframe src ="/hello.php" > </ iframe >
< img src ="/a.gif" />

刷新界面后,输出的代码为:

<
a
 href
="/hello.php?PHPSESSID=a1ff38e07c28474b80766ef96ad88013"
>
hello</
a
>

< form > < input type ="hidden" name ="PHPSESSID" value ="a1ff38e07c28474b80766ef96ad88013" />
< input type ="submit" value ="submit" />
< iframe src ="/hello.php" > </ iframe >
< img src ="/a.gif" />

也就是说,对form,已经能很好地传递sessionId了,但是对于iframe和img,却还是不能传递sessionId。怎么办呢?难道需要我们手动来赋值?

其实不然,在第一部分,我们已经提到一个有用的字段了——url_rewriter.tags。我们尝试增加它对于iframe和img的支持。代码如下:

<?
php
ini_set ('session.use_trans_sid ',1);
$tags = ini_get ('url_rewriter.tags ');
ini_set ('url_rewriter.tags ',$tags.',iframe=src,img=src ');
session_start ();
?>
< a href ="/hello.php" > hello</ a >
< form >
< input value ="submit" />
</ form >
< iframe src ="/hello.php" > </ iframe >
< img src ="/a.gif" />


输出来的结果如下:

<
a
 href
="/hello.php?PHPSESSID=a1ff38e07c28474b80766ef96ad88013"
>
hello</
a
>

< form > < input type ="hidden" name ="PHPSESSID" value ="a1ff38e07c28474b80766ef96ad88013" />
< input type ="submit" value ="submit" />
</ form >
< iframe src ="/hello.php?PHPSESSID=a1ff38e07c28474b80766ef96ad88013" > </ iframe >
< img src ="/a.gif?PHPSESSID=a1ff38e07c28474b80766ef96ad88013" />

很显然,iframe和img也能顺利地传递sessionId了。

到此为止,我们已经能解决大部分的问题了。

 

四、重定向情况下的传递

通过第二部分,我们已经能把页面输出的sessionId传递解决掉了,但这还不是全部。比如,我们经常会通过设置header来进行页面的重定向。

header(‘Location: /hello.php’);

在这种情况下,很显然,php并不会去处理。那么,我们还是需要自己手动来进行调整了。代码如下:

<?
php
ini_set ('session.use_trans_sid ',1);
$tags = ini_get ('url_rewriter.tags ');
ini_set ('url_rewriter.tags ',$tags.',iframe=src,img=src ');
session_start ();

function get_redirect_url($url) {
$sessionkey = ini_get ('session.name ');
$sessionId = session_id ();
if (strpos ($url,'? ') !== false ) {
$tag = '& ';
} else {
$tag = '? ';
}
$url .= $tag.$sessionKey.'= '.$sessionId;
return $url;
}

$rurl = get_redirect_url('/hello.php ');
header ('Location: '.$rurl);
?>

通过get_redirect_url函数,我们就能将重定向的网址也支持传递sessionId了。

太好了,又解决了一种情况。

 

五、wap1.x的特殊情况

不过,在wap1.x下使用wml开发的时候,还有一些特殊的情况。比如,url中的&需要转化为&amp;,否则浏览器解释的时候就会报错。因此,对于页面标签和重定向的情况,我们都需要针对wap1.x的页面做特殊处理。

重定向的情况很好处理,将第四部分的get_redirect_url函数中的$tag=’&’,在wap1.x的环境中替换 为$tag=’&amp;’即可。不过对于界面标签的处理,则需要我们引入一条新的配置项——arg_separator.output。这个配 置项用来指定当在url中加入sessionId参数时,使用什么样的连字符,默认值是&。那么,在已知处于wap1.x环境时,加入如下的语句 即可逢凶化吉了:

ini_set('arg_separator.output','&amp;');

好了,到此为止,我们已经基本上能解决掉wap开发中使用url传递sessionId的大部分情况了。看似内容比较多,实际上就介绍了html标 签中url如何传递sessionId和使用重定向时如何传递sessionId两种情况,并对wap1.x环境下的情况做了一些特殊处理,最终确保不依 赖于cookie的用户登录机制得以实现的过程。希望这些总结的内容对于wap开发者能带来一定的帮助。

爬虫从入门到精通| 了解cookie,session和token,并进行模拟登录 了解cookie,session,token; 并使用cookie和session进行模拟登录; 阅读详情

相关推荐

多用户网盘管理系统实战:基于百度云盘Cookie的扫码登录方案

本文详细介绍了企业级多用户网盘管理系统的开发实战,重点解析了基于百度云盘Cookie的扫码登录方案与权限控制。通过多账号并行管理、动态账号分配和RBAC权限模型,实现高效安全的文件协同管理,适用于教育、广告、电商等多种场景。

study的专栏 1095

SAP ECC6 2027年停服倒计时:中小企业主必看的4条务实出路与成本分析

本文分析了SAP ECC6 2027年停服对中小企业的影响,提供了四种务实出路及成本分析。重点探讨了迁移S/4HANA的隐性成本、云端替代方案的适配性以及混合架构的实践案例,帮助企业管理层做出明智决策。特别提醒关注扩展支持期间的年费涨幅和安全补丁延迟带来的合规风险。

weixin_30732487的博客 494

淘宝扫码登录Cookie获取与自动化实践

本文详细解析了淘宝扫码登录的技术原理与Cookie获取方法,通过二维码作为中间媒介实现快速登录。文章提供了Python自动化实践代码,包括二维码生成、状态轮询和Cookie保存,帮助开发者高效实现淘宝自动化登录与数据采集。

weixin_29325955的博客 544

java模拟浏览器不关闭会话_JSP实现浏览器关闭cookies情况下的会话管理

通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,我们可以通过 URL 重写来实现会话管理。实质上 URL 重写是通过向 URL 连接添加参数,并把 session ID 作为值包含在连接中。然而,为使这生效,你需要为你的 servlet 响应...

weixin_39546312的博客 238

淘宝Cookie自动续期实战:用Python实现扫码登录+Cookie延期(2023最新版)

本文详细介绍了2023年使用Python实现淘宝扫码登录与Cookie自动续期的实战方案。针对传统Cookie易失效的痛点,文章深入解析了淘宝的登录风控机制,并提供了完整的Python代码示例,涵盖扫码登录模块构建、Cookie智能维护策略、模拟用户行为保活以及应对风控的异常恢复技巧,旨在帮助开发者构建稳定长效的自动化登录系统。

wind6的博客 1082

grpc安装与简单demo测试

grpc安装: 由于工作需要,最近在学google的rpc开源框架;由于本人菜鸟一枚,而且是从Windows开发转到Linux;由于之前版本控制使用的是svn,没有使用过git,所以从GitHub上下载代码是通过浏览器下载zip格式的压缩文件,折腾了好几天了,发现了各种坑,各种缺少库,各种不知道怎么把这个库给装机器上。对于一个不熟悉Linux的人来说,这个体验简直糟糕透了。没办法了又在机器上装了...

old__captain的博客 4833

开发移动app与服务器端session的状态管理与交互

我们进行web开发的时候,一般使用cookie或session来保存用户的登录状态,通过检查cookie或session的数据来验证用户是否具有对某些需要登录的页面的访问权限,这一切都是通过浏览器来完成,这是b/s架构,但是,假如客户端是移动应用端,那该怎么办?因为这是c/s架构,无法使用使用cookie或session来检验用户的状态,此时的情况就好像浏览器禁用了cookie。 庆幸的是,这是...

weixin_30765475的博客 733

CCS软件仿真插件移植避坑指南:从CCS5.5到7.4的完整流程

本文详细介绍了将CCS软件仿真插件从CCS5.5迁移至CCS7.4的完整流程与避坑指南。针对TMS320F28335等C2000系列芯片,重点解析了仿真核心文件、配置数据库、连接定义及驱动文件的移植步骤,并通过两个实战Demo验证了移植后仿真环境的可用性,帮助开发者在无硬件条件下继续高效进行算法验证与调试。

defi6farmer的博客 456

使用cookie做用户登录的过程详解

不管是游戏,还是网站,最基本的功能,就是用户注册登录。 或许,我们做过多次用户的登陆注册的功能,但我们是否想过,为什么要实现用户的登录。用户怎样做才算登录成功。 对用户而言,登录后,就有了他的一片“天地”,例如,登录优快云后,就可以管理自己的博客,否则,你没有权利管理。关于是否登录成功的问题,在用户看来,如果用户名和密码输入成功,就算登入成功,否则,登录不成功。 但这一切,在程序中是怎样实...

923723914 1万+

惊呆了!Oracle 11g从入门到放弃的保姆级指南(新手必看)

本文为Oracle 11g数据库新手提供了一份详尽的入门指南。内容涵盖从安装配置、SQL*Plus工具使用、核心的SQL增删改查操作,到事务、索引等进阶概念的解析。文章旨在帮助初学者避开常见陷阱,快速掌握这一经典关系型数据库管理系统的基本操作与核心技能,实现从入门到上手。

ooo22的博客 266

OpenCV-Python实战(3)——OpenCV中绘制图形与文本

OpenCV 是一个的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。本文介绍了 OpenCV 提供的与绘制图形和文本相关的函数。在图形方面,我们了解了如何绘制基本图形(直线、矩形和圆形等)以及高级图形(剪裁线、箭头、椭圆和多边形)。在文本方面,我们了解了如何绘制文本以及 OpenCV 库中的所有可用字体。

盼小辉丶的博客 2万+

如何爬取手机端cookie

什么是cookies Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 通俗来说, ...

m0_37969932的博客 7841

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 219

构建不依赖于cookie的手机端用户登录机制(五)

引:http://hi.baidu.com/comdeng/blog/item/11c19c359c55db1b91ef3952.html 五、wap1.x的特殊情况 不过,在wap1.x下使用wml开发的时候,还有一些特殊的情况。比如,url中的&需要转化为&amp;,否则浏览器解释的时候就会报错。因此,对于页面标签和重定向的情况,我们都需要针对wap1.x的页面做特殊处理。...

weixin_30685047的博客 89

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 267

基于Simulink的固态变压器(SST)多级协同控制

本文基于Simulink平台,详细介绍了固态变压器(SST)多级协同控制的建模与仿真方法。针对SST三级架构(AC-DC、DC-DC、DC-AC)存在的级间耦合问题,提出了纵向解耦与横向联动的协同控制策略。通过搭建10kV/400V级联型SST系统模型,实现了输入电压波动±20%或负载0-100%跳变时直流母线电压波动小于2%的控制目标。文章详细讲解了Simulink建模步骤、控制算法推导及工程部署建议,包括功率前馈控制、虚拟惯性算法等关键技术。仿真结果表明,该协同控制方案能有效抑制负载突变时的电压波动,为

MHD0815的博客 214

构建不依赖于cookie的手机端用户登录机制(四)

引:http://hi.baidu.com/comdeng/blog/item/644f11fa73b51a9d58ee9052.html 四、重定向情况下的传递 通过第二部分,我们已经能把页面输出的sessionId传递解决掉了,但这还不是全部。比如,我们经常会通过设置header来进行页面的重定向。 header(‘Location: /hello.php’); 在...

weixin_30666753的博客 112

rk3568 rk628桥片 rgb2hdmi

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 452

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP构建不依赖于cookie的手机端用户登录配置,url_rewriter.tags设置

手机端登录网站的问题是一个困扰我很久的问题。总是会有那么一些用户告诉我,他的手机不能登录网站了。要想能有效地解决手机登录的问题,一种方案就 是尽可 能多地模拟出用户的手机端环境出来,针对这些具体的环境对代码进行测试和调整。另一种方案就是尽可能地让网站摆脱对于客户端cookie环境的依赖,创建 更加健壮的代码。   随着信息技术的发展,手机本身的硬件设备越来越先进,功能也越来越全面,对于coo

xmlife的专栏 1728

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

怎样实现登录用户管理_怎样实现登录?| Cookie or JWT

先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后台校验一下,完事了。但是,登录这个过程涵盖的知识点是非常多的,绝不是检索数据,校验一下这么简单的事。那么登录都要哪些实现方式呢?i最传统的就要是Cookie-Session这种方式了,最早的登录方式都是这样实现的。但是随着手机...

weixin_39700625的博客 320

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

登录网站后自动退出需重新登录_怎样实现登录?| Cookie or JWT

Q:先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后台校验一下,完事了。但是,登录这个过程涵盖的知识点是非常多的,绝不是检索数据,校验一下这么简单的事。Q:那么登录都要哪些实现方式呢?最传统的就要是Cookie-Session这种方式了,最早的登录方式都是这样实现...

weixin_39984578的博客 1222

Cookie的奇幻漂流:揭秘淘宝扫码登录背后的身份穿梭术

本文深入解析淘宝扫码登录背后的技术原理,揭秘Cookie如何在跨设备间安全传递身份信息。从动态二维码生成到双因子确认,详细介绍了淘宝如何通过UUID映射、Redis缓存和轮询机制实现无缝登录,同时确保安全性。文章还探讨了扫码登录相比传统方式的优势及未来发展趋势。

embedding5hiker的博客 696

怎样实现登录?| Cookie or JWT

推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 最全面试题新鲜出炉:70+算法题、近30种大厂面试笔试常考知识点 先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户...

xingduan5153的博客 656

实现登录_怎样实现登录?| Cookie or JWT

先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码,后台校验一下,完事了。但是,登录这个过程涵盖的知识点是非常多的,绝不是检索数据,校验一下这么简单的事。那么登录都要哪些实现方式呢?i最传统的就要是Cookie-Session这种方式了,最早的登录方式都是这样实现的。但是随着手机...

weixin_34504649的博客 131
上一篇: 如何去掉IIS中Response Headers的X-Powered-By、X-AspNet-Version和Server项
LOVE_NET_HCF
博客等级 码龄18年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值