ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-更新基于Facebook连接网站的cookie?

2019-12-10 11:34:15  阅读:293  来源: 互联网

标签:cookies authentication facebook php


我在使用PHP构建的网站上将Facebook Connect API用于登录系统.没有直接的方法来确定用户是否已登录.

$fb = new Facebook($api, $secret);
$fb->get_loggedin_user();  

上面的函数总是返回一个用户ID,一旦用户通过了网站的身份验证,即使他们退出了Facebook,它仍然会返回其用户ID.
我已经进行了一段时间的工作,环顾四周后,我认为这样做的原因是因为在网站上对用户进行身份验证时,Facebook JavaScript API存储用于保存有关会话信息的cookie.
但是,如果用户退出常规Facebook会话,即使该会话不再有效,cookie仍将返回值.
我的问题是如何更新cookie,以便在会话不再有效时它们不给我值?

解决方法:

这可能有点棘手.基本上,Facebook在用户浏览器上存储了一堆Cookie,这些Cookie的名称空间为您的应用程序ID(即12345_fb_sig = etc).这些cookie用于告知FB Connect应用程序用户已登录Facebook,并传递了Facebook会话ID.但是,如果用户转到其他地方并注销,则这些cookie不会被清除,就您的Connect站点而言,该用户仍处于登录状态.如果用户稍后返回并尝试使用该方法进行API调用会话密钥,它将失败.

您可以从对PHP FB API客户端$facebook-> api_client-> clear_cookie_state()的服务器端库调用中清除这些cookie,但是,我不建议使用此方法.它要求您在每次页面加载时进行某种API调用,以确认会话密钥仍然有效,这会增加很多开销.

通常,解决此问题的最佳方法是使用已经用于FB Connect的FB Javascript库.您可以向用于设置FB Connect的FB.init()调用添加一个参数,如果客户端的会话状态已更改,该参数将强制刷新页面:

FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 

这有点不雅致,因为用户将看到页面重新加载的发生,但这可能是确定的最佳方法.我强烈建议您查看Detecting Connect Status Wiki页面,以获取有关这些技术的更多信息.

标签:cookies,authentication,facebook,php
来源: https://codeday.me/bug/20191210/2101126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有