`
sanrenxing_1
  • 浏览: 17270 次
社区版块
存档分类
最新评论

PHP websocket实现扫码二维码登录

阅读更多

最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式。当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些。
要实现扫码登录我们需要解决两个问题:
1.  在没有输入用户名及密码的情况下,如何解决权限安全问题?换句话讲,如何让服务器知道扫码二维码的客户端是一个合法的用户?
2.  服务器根据用户在客户端的选择如何实时在网页上作出相应的响应?

首先我们先理一下微信的实现思路,来方便我们理解解决这一难题的思路方向。微信登录的二维码实际上是将一个URL转换成二维码的形式,而通过微信客户端扫码后,无非就是打开了这个url, 我捕捉到的微信二维码的urlhttps://login.weixin.qq.com/l/YdmTu30I5A== ,这个url里的YdmTu30I5A==代表的是本次会话的唯一ID, 这个有点儿类似浏览器里的session id,通过这个ID,微信就能定向将确认结果反馈到网页上。使用微信二维码登录功能,需要有两个前提:一是客户端上需要安装微信app二是用户需要登录到到微信apphttps://wx.qq.com/

 

 PHP Websocket消息推送

 

为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过session ID服务器知道将反馈结果推送到哪个网页。

   所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个secure key),在选择是否登录时将这个结果一并推送到服务器端,就好了。如果用户没有验证是否合法,可以像微信的处理方式一样直接告诉用户二维码不可识别或提示请先登录到app

  有了身份验证,那么现在就解决第二个问题,如何将反馈结果实时地显示在网页上呢?有朋友可能会说,客户端这边很简单发一个请求到后台就好了,而网页上用ajax定时发送到服务器端看是否有反馈。我不赞成这种做法,因为ajax轮询方式十分消耗客户端和服务器端资源!这里涉及到另一个技术-web实时推送技术,使用推送技术可以节约服务器端和客户端的资源,可以稳定地推送和接收任何消息。我在实现的过程中我采用了第三方推送服务-GoEasy推送,用它是实现非常简单,我们项目里的其他功能也用到了GoEasy web实时推送服务,所以在此我直接就用的GoEasy推送来将登录反馈结果推送到服务器。我的实现步骤非常简单,将传送的session ID作为客户端与网页端的通信channel,网页端订阅用session ID作为值得channel,客户端将验证结果和session ID发送到服务器端,服务器端可以通过这个channel主动将结果推送给网页版!如果客户端也需要做相应的反馈的话,那么客户端也只需要订阅这个channel,然后服务器端会同时将结果推送给网页版和客户端,收到消息后,就可以根据需求在goeasy的回调函数里做你想做的事情了。关于goeasy推送的使用,大家可以参考这篇博客: http://www.cnblogs.com/jishaochengduo/articles/5552645.html另外GoEasy推送官网上也有一个demoGoEasy二维码扫码登录demo,大家可以去看看效果.

  希望对大家有帮助,如有理解错误的地方,还请大家斧正。

分享到:
评论

相关推荐

    扫码登录Demo.zip

    学习这个Demo,你可以了解如何使用WebSocket实现客户端和服务器之间的实时通信,以及如何在实际项目中实现扫码登录功能。 总结起来,这个"扫码登录Demo.zip"提供了一个完整的示例,涵盖了WebSocket协议在扫码登录中...

    采用Websocket实现的单设备登录的SpringBoot的后端部分

    在本文中,我们将深入探讨如何使用SpringBoot框架和WebSocket技术来实现单设备登录功能。SpringBoot简化了Java应用的开发过程,而WebSocket则提供了一种双向通信机制,使得服务器和客户端可以实时交换数据。 首先,...

    Java微信登录+websocket.rar

    在本项目中,我们主要探讨的是如何实现基于Java的微信网页扫码登录功能,并结合WebSocket技术构建实时通信系统。以下是对各个部分的详细说明: 1. **微信登录**:微信登录是一种常见的用户认证方式,它利用微信开放...

    php实现的websocket客户端

    php实现的websocket客户端,不是服务器哦,可以在php代码中与websocket服务器进行简单的通信。通信完成后随着php请求完成关闭连接。经过改造可以实现长连接。测试连接swoole 1.7的websocket服务器没有任何问题。

    JS实现扫码枪扫描二维码功能

    在JavaScript中实现扫码枪扫描二维码的功能,主要是通过监听键盘事件来模拟扫码过程,因为扫码枪在扫描二维码后,会将二维码中的数据模拟成连续的键盘输入。以下将详细讲解实现这个功能的关键步骤和注意事项。 首先...

    android利用WebSocket实现消息推送

    WebSocket是Web应用中实现双向通信的关键技术,它允许服务器与客户端之间进行实时、低延迟的数据交换,极大地提升了网络应用的交互性。在Android平台上,利用WebSocket实现消息推送,可以让应用程序实时接收服务器端...

    day10-RocketMQ集群、分布式WebSocket实现以及地图找房功能实现.zip

    在本课程"某马程序员-JavaEE 57期-day10-RocketMQ集群、分布式WebSocket实现以及地图找房功能实现"中,我们将深入探讨三个关键的IT技术领域:RocketMQ集群的构建与管理,分布式WebSocket的实现,以及地图找房功能的...

    webSocket实现Android客户端之间简单的通讯

    在Android中实现WebSocket通信,首先需要引入相关的库。Java中常见的WebSocket库有Socket.IO、okHttp-WebSocket-Client等。以okHttp-WebSocket-Client为例,我们首先需要在项目中添加依赖: ```groovy dependencies...

    基于socket的扫码枪服务+web前台

    【标题】"基于socket的...总结来说,这个项目涉及到的主要技术包括C#编程、.NET框架、Socket通信以及WebSocket技术,实现了扫码枪数据的实时传输和Web界面的动态展示,为材料管理系统提供了高效、实时的信息处理能力。

    最新游戏扫码登录源码(Safari+微信).zip

    - **Websocket或长轮询**:为了实现实时通信,确保用户扫码后立即在浏览器端接收到登录状态的变化,可能需要用到Websocket或长轮询技术。 2. **Safari浏览器兼容性**: Safari浏览器可能有自己的特性和限制,...

    spring-boot+webSocket实现向日葵远程控制

    本项目为spring-boot+webSocket实现的向日葵远程控制项目 向日葵是一款很好用的远程操作软件。 一直很好奇这种软件的基本原理是如何的? 今天带大家通过一个简单的项目来探究一下,并实现一个简单的远程操控软件 ...

    微信小程序websocket实现即时聊天功能

    在Web开发中,WebSocket常用于实现即时通讯功能,如在线聊天、股票行情更新、游戏同步等。微信小程序作为轻量级的应用平台,也支持WebSocket API来实现实时聊天功能。 在微信小程序中,WebSocket的使用步骤大致如下...

    java扫码枪

    Java扫码枪技术是Java在物联网(IoT)和Web应用领域中的一个重要应用,它使得用户可以通过扫码枪设备读取条形码或二维码中的数据,并将其集成到应用程序中进行处理。本DEMO项目展示了如何在Web环境中实现这一功能,...

    用jetty8.0写的websocket实现的简单聊天程序

    在这个“用jetty8.0写的websocket实现的简单聊天程序”中,我们将深入探讨如何利用Jetty 8.0这个轻量级、高性能的Java Web服务器和Servlet容器来构建WebSocket应用。 Jetty是一个开源的HTTP服务器和Servlet容器,...

    websocket实现聊天记录

    8. **后端实现**:后端通常用Node.js、Java、Python等语言实现,负责接收和发送WebSocket消息,处理登录验证,以及与数据库的交互,存储和检索聊天记录。 9. **心跳机制**:为了检测和保持连接的活跃,WebSocket...

    websocket实现前端页面动态刷新数据库中数据

    在“websocket实现前端页面动态刷新数据库中数据”的项目中,我们看到技术栈包括WebSocket、MySQL、Java 8和Tomcat 8。下面是这些技术如何协同工作来实现目标的详细解释: 1. **WebSocket**:WebSocket API是HTML5...

    php实现websocket客户端

    然而,PHP也可以实现WebSocket客户端,这在某些情况下非常有用,比如测试WebSocket服务器或在PHP环境中集成WebSocket通信。 在给定的资源中,我们有两个文件:`websocket_client.php` 和 `demo.php`。`websocket_...

    扫码登录功能,使用workerman

    总的来说,这个项目利用了ThinkPHP的便捷性和Workerman的高性能,实现了扫码登录的功能。在实际应用中,还可以考虑添加更多的安全措施,如HTTPS加密传输、防止重放攻击等,以提升系统的安全性。此外,对于大型项目,...

    java websocket实现视频聊天

    Java WebSocket 实现视频聊天是一种在Web上实现实时通信的技术,它允许服务器和客户端之间建立持久的连接,以便数据可以在两个方向上同时传输,而无需为每个消息创建新的HTTP请求。在本项目中,Java WebSocket被用来...

    集成websocket实现实时通信.zip

    在"集成WebSocket实现实时通信.zip"这个压缩包中,可能包含了一套关于如何在若依(RuoYi)前后端分离框架中集成WebSocket的教程或示例代码。若依是一款基于Spring Boot的开源后台管理系统,其设计目标是轻量、简洁,...

Global site tag (gtag.js) - Google Analytics