关于PHP实现扫码登录

  1. 首先,我来讲题下我做这个功能的原因。

    因为公司接了某企业的一个单子,微信开放平台本来是提供第三方登录的,但是他们并没有给我们的域名授权,然而,授权审核需要7天。于是,我决定采用微信端公众平台的授权获取用户信息后实现PC端登录。

  2. 登录的原理

    登录的原理无非就是session或者cookie,然而,博主这里用的是session,session是连接客户端和服务器的重要部分。但是,不同的客户端连接服务器会产生不同的session,那么实现微信登录后同步到浏览器的关键就是,同步这两个客户端的session。

  3. 关键:如何使两个客户端的session同步

    其实服务器在于客户端进行通信的时候产生的每一个session都是带有一个唯一的id的,至于这个id(ps:博主是php的),我们可以用session_id()得到。

既然既然我们可以得到session_id了,接下来就是实现session同步了。关键点还是这个函数,session_id(),           这个函数不仅可以或得到本次session的id,还能让当前的session成为一个已知的sessionid的session。这里有点           绕,大家要好好理解。

在我实验下来,大概是这么用的。例如,我在PC端获取到了PC端的sessionid,假设为1,我用微信鉴权的路            径生成一个二维码,其中,将这个PC端的sessionid作为参数,放入回调地址中。让微信在扫码鉴权后,回调到            我制定的控制器,去同步session内容。

这里模仿微信鉴权后获取到了用户的信息:

// 首先我判断这次回调是否带上了sessionid参数

if($sessionid = $_GET[‘sessionid’])

// 将sessionid存入session,避免get的过程中丢失

$_SESSION[‘session_id’] = $sessionid;

// 在获取用户微信信息后加入以下代码,如果鉴权获得微信信息,请自行百度

if($sessionid = $_SESSION[“session_id”]){
unset($_SESSION[“session_id”]);
$session = $_SESSION;

//  同步PC和微信端的session
session_id($sessionid);

// 将获取到的微信信息存入这个共同session中
$_SESSION = $session;

// 启用这个session,关键,一定要使用这步
session_start();

//  这一步本来是博主用来重置微信端的sessionid用的,但是博主发现使用了这个函数之后,之前的session就无效了。
//  session_regenerate_id();
}

4.到此,PC端和微信端的session就同步了,可以在用户打开扫码的同时开启一个ajax,定时访问某个接口,判断session值是否改变,如果改变就跳转到指定页面,这样就实现了微信扫码登录。

PS:刚想出这个方法,怕自己忘记就写了,不一定是最安全,最好的,希望大家有不会的可以借鉴一下我的思路。

猜你喜欢

转载自blog.csdn.net/qq_31343581/article/details/60322721
今日推荐