问题

用户进入页面A,在页面A上要执行一个操作X。操作X需要用户登录后才能访问,因此系统引导用户到登录页,用户登录后在让用户继续执行操作X。

分析

操作X存在两种情况,1:跳转到一个页面B;2:执行一个操作。

进入页面B的情况,要在页面B的入口位置判断是否用户是否为登录状态,是则进入,否则进入登录页面,登录成功后再进入页面B。假设页面A的URL是是url-a,页面B的url是url-b,登录页面的url是url-l,那么浏览器的地址依次是url-a,url-b,url-l,url-b。因此,系统就是要解决登录模版如何记录url-b,并在成功后进入url-b。

执行一个操作的情况。执行操作前判断用户的登录状态,是则执行操作,否则先跳转到登录页面,登录成功后返回页面A,页面A继续执行之前的操作。这时,登录页要记录页面A,登录成功后返回A,页面A要记录用户的操作和参数,从登录页返回后继续执行。

实现

页面跳转

页面跳转的情况,由页面B负责判断是否要跳转到登录页,如果需要用redirect的方式完成。

header("Location: $loginURL");
exit;

在login页面需要知道是从哪个页面跳转来,并保存,这样登录成功后再跳转回原来的页面。PHP中可以通过$_SERVER['HTTP_REFERER']获得是从哪个页面进入的的登录页。

$referer = $_SERVER['HTTP_REFERER'];

进入登录页时获得的$referer必须要记录下来,才能在登录成功后跳转回之前的页面。跨调用保存信息有4种方式:1、保存在session中;2、保存在cookie中;3、作为参数放在url中;4、生成页面时,作为页面的隐藏信息。

放在session中,只能通过php获取,因此,登录成功后跳转回原页面的操作只能在php中进行,这样就不能实现通过一个ajax调用验证用户登录信息后,在前端页面直接跳转指定页面。

采用cookie的方式需要前后端共同确定一个约定,用什么代表页面的跳转信息,另外前端需要增加cookie的处理逻辑。这种方式可以同时支持前端或后端进行跳转。

作为参数放在url中可以实现在前端进行跳转,但是会导致url看起来有些怪异,同时还需要考虑url编码的问题。

直接生成在登录页面中(利用页面模版)作为前端参数,这种方式支持在前端进行跳转,需要前后端约定参数的定义。

执行操作

执行操作的情况应该是页面A判断用户是否已经登录,或者根据执行操作X的返回结果,由页面A直接跳转到登录页面,登录界面记录是从哪个页面跳转来的。

header("Location: $loginURL");
exit;

页面A执行跳转到登录页面前,首先记录要执行的操作,例如:操作的名称,这个信息必须可以跨请求访问。操作的相关信息可以通过url、session、cookie传递,或者通过localStorage、sessionStorage保留在客户端。

如果用url指定要执行的操作(用history.pushState替换url),只能携带简单的参数(放在history中是个好方法?没想明白),通用性不好。session和cookie需要向服务器端传数据,而且获取保留的参数并不方便。最后决定选择sessionStorage保存要执行的方法。

跳转到登录界面前保存要执行的操作:

if (window.sessionStorage) {var method = JSON.stringify({name: '要执行的方法的名称',args: [参数1,参数2]});window.sessionStorage.setItem('pending.method', method);
}

从登录界面跳转回页面,取出要执行的操作并执行:

if (window.sessionStorage) {var pendingMethod;if (pendingMethod = window.sessionStorage.getItem('pending.method')) {window.sessionStorage.removeItem('pending.method');pendingMethod = JSON.parse(pendingMethod);window[pendingMethod.name].apply($scope, pendingMethod.args || []);}
}

总结,采用的方式是通过HTTP_REFERER和cookie记录登录后要跳转的页面,通过sessionStorage记录返回页面后要执行的javascript方法和参数。

JS+PHP实现登录后自动执行之前的操作相关推荐

  1. Xshell登录后自动执行命令

    目录 专栏说明 一.Xshell软件介绍 二.Xshell登录后自动执行命令 1.软件下载: 2.Xshell登录后自动执行命令 专栏说明 本专栏主要介绍windows及linux下嵌入式开发工作者常 ...

  2. linux脚本执行命令登录,Linux登录后自动执行脚本,系统基础信息一目了然

    原标题:Linux登录后自动执行脚本,系统基础信息一目了然 日常巡检是很多运维的小伙伴们每天必须进行的一件事,反反复复就那几条命令,敲得不胜其烦.有没有一个一劳永逸的办法呢? 有,我们可以创建一个脚本 ...

  3. Centos7设置欢迎语,登录后自动执行指定的命令,脚本等

    设置欢迎语 设置欢迎语可以修改两个地方: /etc/issue 与 /etc/motd /etc/issue 与 /etc/motd 作用一致,都是用于显示欢迎信息, 区别在于: /etc/issue ...

  4. JS动态插入HTML后不能执行后续JQUERY操作

    通过js追加的html 发现 不能点击 执行函数 普通绑定事件:$('.btn1').click(function(){}绑定 事件委托 解决方法: $("body").deleg ...

  5. JS,两种在页面加载完成后自动执行的方法(ready,onload)

    JS,两种在页面加载完成后自动执行的方法 1.jQuery的ready事件,需要引入jQuery的包才能使用,表示文档结构已经加载完成(不包含图片等非文字媒体文件): ready可以多次调用,可以绑定 ...

  6. spring启动后自动执行一次方法

    说明 spring启动后自动执行一次方法:因为需要保证所有调度相关的依赖注入spring容器才创建所以定时调度任务,所以需要实现在Spring容器将所有的Bean都初始化完成之后才自动执行一次执行方法 ...

  7. Linux开机后自动执行命令或脚本

    文章目录 说明 应用场景 涉及文件 步骤 1.添加开机执行指令 2.编写脚本 3.测试效果 自动化编辑工具 脚本 效果 已存在的脚本 不存在的脚本 说明 应用场景 应用场景:开机后自动执行命令或脚本 ...

  8. 利用Referer+URL参数 实现登录后自动跳回登录前页面

    登录后自动跳回登录前页面 原理: 利用Referer+URL参数实现 1:用户未登录,试图点击下载(下载前需要登录),点击Download时,发出的请求会带上Referer头 2: 重定向到登录页面时 ...

  9. 开机后自动执行bat文件中的python程序,自动登录软件进行功能配置

    文章目录 1.bat文件 2.使用pyautogui进行自动点击 1.bat文件 bat文件的作用是可以和cmd命令行一样自动执行,将其放置到开机自启动文件夹中,便可以实现开机后的自动执行. 开机自启 ...

最新文章

  1. python中的对象拷贝
  2. 重新复习一下JDK14的9大重磅特性
  3. 惊呼!JavaScript基本数据类型和引用数据类型详解
  4. jedis StreamEntryID参数解释
  5. python csv文件复制时的编码问题_使用python读取CSV文件时的编码问题
  6. 采集练习(七) php 获得电视节目预告(一周节目)
  7. 免费snmp oid下载
  8. diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...
  9. Ajax调用服务器端C#方法
  10. for/map循环里面进行异步操作async/await后返回数据,for里不能直接return执行方法函数...
  11. Qt_17行代码 QString英文字符串转16进制显示
  12. Vivado工程清除中间文件
  13. hdu 1598 find the most comfortable road 枚举+最小成生树 kruskal 解题报告
  14. wordpress面包屑-wordpress面包屑设置方法
  15. WGCLOUD部署对服务器硬件配置的一些建议
  16. android 控制中心os,Phone X Launcher, OS 11 iLauncher Control Center
  17. 解决 docker 磁盘空间不足问题
  18. lammps教程:均方位移MSD计算方法介绍
  19. 裁缝式开发:用MATLAB批量发送一封图文并茂的邮件
  20. java iconiamge大小_java – 自动将ImageIcon缩放到标签大小

热门文章

  1. postgresql 集合类型_PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP)
  2. Javascript快速排序
  3. 使用Android Studio打包app
  4. linux make项目管理器,Linux中makefile项目管理
  5. js两个等号和三个等号_这两个号段开头的手机号,已成“古董号”,手里有的保存好...
  6. 20201219:力扣219周周赛题解
  7. php开发当中遇到的各种问题,PHP项目开发中遇到过的问题
  8. VB数组快速排序算法
  9. 修复GRUB [转]
  10. Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置