C#实现基于ASP.NET SignalR:扫描二维码登录PC网站

news/2024/5/19 23:33:10/文章来源:https://blog.csdn.net/weixin_34306446/article/details/92578202

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

     移动互联网的兴起,掀起了另一股热潮。社会的发展,促使IT界,不断更新。不同的语言,不同的平台,衍生出层出不穷的技术框架。行业的种种,或大或小的变革,在不同程度上,改变着我们的生活。只有不断学习和尝试,再加上一点点思考和创新,机会,总会有的,送给奋斗在所有站线的同道朋友。

    2016年11月22日,抑郁了一周的天气,在清晨,人们醒来,打开窗帘的时候,在朦胧的睡眼中,将世界犹如童话般,映入眼帘。一夜的风雪,使世间万物,像被圣诞老人随手丢落的床单,遮盖住了昔日的景色。大地,统一了颜色,不忍,在内心嘲笑圣诞老人的同时,又急切的盼望着这场风雪,能带来来年的另一场丰收。一样的颜色,世界从来没有这么一致过,白色所带来一丝忧伤,只是生命里逝去的的过往。

     趁着风雪正急,坐在这里,房间里暖暖的茶香。切入正题:

     扫描二维码登录PC网站,在这里只是简单的做了个例子。借助于ASP.NET SignalR,我们可以轻松实现。具体的步骤如下:

    首先,通过Nuget来引用ASP.NET SignalR

 在这里,我简单的创建了一个MVC项目,结构如下:

我创建了名为Account的控制器。里面分别创建了2个Action(Index、Auth)。

/Account/Index负责生成扫描的二维码。

/Account/Auth负责完成登录授权。

两个页面都需要实现引用jquery和

jquery.signalR-2.2.1.min.js

通过nuget引用的时候,scripts文件夹中就有。

在/Account/Index下,后台Action不需要什么写什么代码,主要看看视图。

    <div id="container"></div><script src="~/Scripts/jquery-1.6.4.min.js"></script><script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script><script src="~/signalr/hubs"></script><script type="text/javascript" src="http://cdn.staticfile.org/jquery.qrcode/1.0/jquery.qrcode.min.js"></script><script type="text/javascript">$(function () {var $container = $("#container");var _LoginHub = $.connection.LoginHub;$.connection.hub.start().then(init); //开始/*** 初始化**/function init() {_LoginHub.server.getConnectionId().done(function (serverNode) { });}/***client**/$.extend(_LoginHub.client, {showQRCode: function (id) {console.log(id);jQuery('#container').qrcode(document.location.origin + "/account/auth?id=" + id);},gotoUrl: function () { alert("登录成功!");  }});}());</script>

就这就简单。$.extend()方法,是为了给client对象增加扩展函数,方便服务端调用。

来,看看Hub的实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;/******************************************************************************************************************* * * 说 明:授权(版本:Version1.0.0)* 作 者:李朝强* 日 期:2016/11/22 17:46:47 * 修 改:* 参 考:http://my.oschina.net/lichaoqiang/* 备 注:暂无...* * * ***************************************************************************************************************/
namespace SignalRLogin.Hubs
{/// <summary>/// LoginHub/// </summary>[HubName("LoginHub")]public class LoginHub : Hub{/// <summary>///<![CDATA[获取客户端ID]]>/// </summary>public void GetConnectionId(){try{string connectionId = Context.ConnectionId;//客户端IDClients.Client(connectionId).showQRCode(connectionId);//调用客户端方法,显示二维码}catch (Exception exception){}}/// <summary>/// 登录/// </summary>public void Login(string connectionId){try{//登录成功后,跳转到指定页Clients.Client(connectionId).gotoUrl(connectionId);//调用客户端方法,显示二维码}catch (Exception exception){}}}
}

里面订阅2个方法,GetConnectionId是为了给客户端提供一个获取连接标示的方法。Login方法,就是来是来实现登录逻辑,这里省去登录的具体细节。

场景是这样的:当用户A访问我们的网站W的登录页面时,我们给他提供了一个扫描二维码实现登录的地方。

当用户用手机,扫描我们给他们的二维码时,二维码这里其实就是一个带有connectionId的连接,通过connectionId来保持客户端与服务器的连接。用户A通过扫描指定的二维码,就会打开我们生成二维码的连接地址,这里指的就是(/Account/Auth)。

用户A点击登录按钮后,我们通过js,调用服务器对象的login方法,同时把传递过来的connectionId再传给服务器,这样,服务器就通过connectionId找到对应的客户端,来实现服务器和客户端的交互。

来看看效果吧:

这里需要注意的地方是,connectionid每次刷新页面的时候,都会改变,切记。于是,我们在生成二维码的页面上,定义了登录成功后回调函数。这里是gotoUrl。用户扫描打开/Account/Auth页面后,点击确定按钮,这个过程,PC端网页是没有刷新的,也就是说,PC端的connectionId是没有改变的。我们通过,Account/Auth页面,完成登录授权后,再调用客户端的回调函数gotoUrl,这个过程就完成了。

SignalR的用法非常好了解。说白了,就是客户端和服务端相互调用,来达到交互的目的。我们在后台声明一个类,让它继承Hub类后,在类中定义我们需要的方法,然后客户端通过$.connection.HubName,就能获取到服务端定义的对象在客户端的映射。服务端Hub派生类中定义的方法,在客户端,都转变成开头字母小写的js方法,服务端和js可以相互调用传参。

好了,关于ASP.NET SignalR的用法,今天就简单的给大家介绍到这里了,下一次,向大家介绍一下,SignalR聊天室。

 

转载于:https://my.oschina.net/lichaoqiang/blog/792496

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_725933.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念&#xff0c;以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。统计网站在线人数分析我们在网站中一般使用Session来标识某用户是否登陆了&#xff0c;如果登陆了&#xff0c;就在Session域中保存相对应的属性。如果没有登陆&…

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念&#xff0c;以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了&#xff0c;如果登陆了&#xff0c;就在Session域中保存相对应的属性。如果没有…

浅谈CDN、SEO、XSS、CSRF

CDN 什么是CDN 初学Web开发的时候&#xff0c;多多少少都会听过这个名词->CDN。 CDN在我没接触之前&#xff0c;它给我的印象是用来优化网络请求的&#xff0c;我第一次用到CDN的时候是在找JS文件时。当时找不到相对应的JS文件下载地址(之前一般我都是把JS下载下来&#…

国内那些的求职网站

阅读文本大概需要6分钟。金三银四&#xff0c;也许你需要CSDN JOBCSDN JOB是中国最专业的IT技术人才招聘平台&#xff0c;为IT工程师及IT企业提供更加全面更加专业的职业服务&#xff0c;号称最懂程序员的社区招聘。官网&#xff1a;https://job.csdn.net/领英LinkedIn&#xf…

系统网站架构(淘宝、京东) 架构师能力

来一张看上去是淘宝的架构的图&#xff1a; 参考地址&#xff1a;http://hellojava.info/?p520 说几点我认可的地方&#xff1a; 架构需要掌握的点&#xff1a;通信连接方式&#xff1a;大量的连接通常会有两种方式&#xff1a; 1. 大量client连一个server 在现如今NonBlocki…

网站性能优化整理笔记

为什么80%的码农都做不了架构师&#xff1f;>>> 优化网站响应时间方法 1、减少http请求 可以降低网站的响应时间和减少传输的数据&#xff0c;主要方法&#xff1a; 1&#xff09;将多个图片合并成一个文件&#xff0c;减少图片下载的请求 2&#xff09;合并js脚本…

爬一爬哪个操蛋的药品网站,建立药品库

阅读文本大概需要5分钟。互联网医疗公司&#xff0c;有一个完整、完全、正确的药品库非常重要&#xff1b;今天来说一说小编在上一个东家为了建立一个自己的药品库是怎么做的。首先我们是一家小公司&#xff0c;但是我们有一个纽约敲钟的梦想&#xff0c;虽然就要闹得发不了工资…

从零开始写项目终极【维护网站、修复Bug】

url自动携带jsessionid在我使用浏览器收藏了我写的网站的时候&#xff0c;有的时候会访问不了页面。看了一下原因&#xff0c;是由于url携带了jsessionId&#xff0c;我就奇怪为啥会自动携带jsession了。我分析是由“记住我“功能引起的这个bug&#xff0c;于是我就去查找了一下…

classname帝国怎么用php调用,分享帝国cms怎么调用栏目别名考虑到seo优化

在新模板制作过程中&#xff0c;由于栏目名称比较长&#xff0c;用在标题上没有问题&#xff0c;对seo有利&#xff0c;但是在页面上不希望这么长&#xff0c;简单即可&#xff0c;提过提供了栏目别名&#xff0c;如果能调用就方便了&#xff0c;请留意下面的修改方法修改后栏目…

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y从第一篇已经讲解过了监听器的基本概念&#xff0c;以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。统计网站在线人数ps:这个可以使用We…

大型分布式网站架构设计与实践

阅读文本大概需要3分钟。SOA和RPC随着互联网规模发展&#xff0c;面向服务的体系架构(SOA)成为主流的架构方式&#xff0c;SOA的本质思想是高内聚、低耦合地实现分治&#xff0c;各个系统之间通过服务的方式进行交互&#xff0c;这样保证了交互的标准性&#xff0c;这对于一个复…

为什么有些网站域名不以www开头?什么是二级域名?

本文公众号来源&#xff1a;漫话编程 作者&#xff1a;漫话编程我在初学的时候不清楚啥叫顶级域名&#xff0c;啥是二级域名以及为啥我们输入网站地址的时候可以省略www&#xff01;这篇文章通俗易懂地告诉你&#xff01;38女神节那一天&#xff0c;女朋友问我淘宝网国际站的…

大型网站技术架构剖析

阅读文本大概需要3分钟。大型网站系统特点高并发&#xff0c;大流量高可用海量数据用户分布广泛&#xff0c;网络情况复杂安全环境恶劣需求快速变更&#xff0c;发布频繁渐进式发展大型网站发展演化过程一台服务器特点&#xff1a;没人应用程序、数据库、文件都在一个服务器。应…

[网站优化实战]公共CDN库/Nginx启用Gzip/全站CDN加速

本文公众号来源&#xff1a;Rude3Knife 作者&#xff1a;蛮三刀把刀网站加载优化的过程&#xff08;主要针对静态资源&#xff09;&#xff0c;思路可以借鉴一下&#xff01;前言接触到CDN的起因&#xff1a;我自己搭建的网站https://price.monitor4all.cn/网页打开的速度一直…

《大型网站系统与Java中间件》读书笔记(上)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y 这本书买了一段时间了&#xff0c;之前在杭州没带过去&#xff0c;现在读完第三章&#xff0c;来做做笔记 这本书前三章都在科普和回顾中间件/分布式…

《大型网站系统与Java中间件》读书笔记 (二)

前言只有光头才能变强。文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y回顾上一篇&#xff1a;《大型网站系统与Java中间件》读书笔记&#xff08;一&#xff09;这周周末读了第四章&#xff0c;现在过来做做笔记&#xff0…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y 回顾上一篇&#xff1a; 《大型网站系统与Java中间件》读书笔记&#xff08;一&#xff09; 这周周末读了第四章&#xff0c;现在过来做做笔记&am…

几个简单步骤可以提高网站浏览体验

摘要&#xff1a; STEP 1确定网站定位 你的网站定位是要以企业形象官网为主&#xff0c;或是以单纯贩售商品的购物网站&#xff0c;还是要跟使用者做互动活动的网站&#xff1f; 每个网站的目的都不尽相同&#xff0c;形象官网&#xff0c;可能需要着重于品牌理念、品牌故事、…

一次面试引发的思考(中小型网站优化思考)

前言 故事的起因是这样的&#xff0c;由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽&#xff0c;但是这里的软件行业实在是算不上“美丽”&#xff0c;这么多年由于个人原因或者公司原因经常换工作&#xff0c;因为这里都是中小型公司&#xff0c;没有什么大公司。…

我采访了同事,让他掏出了每天都会浏览的干货网站...这几个网站也太牛了吧!

前言 在周六的晚上&#xff0c;我日常去到公司写文章。想写一篇程序员常浏览的网站&#xff0c;刚好同事在我后面看我在干什么。于是我就对他进行了采访&#xff0c;问了一下他常去的网站有哪些。 这次我采访的是鸡蛋&#xff0c;他跟我一样大&#xff0c;但是技术比我优秀实在…