我已登录Banana.com
。 Banana在/app/ajax_loggedin
上有一个api链接。
我的网站是猴子。 Monkey运行一个简单的GET json到香蕉的/app/ajax_loggedin
,它返回1或0的登录值。
为什么它通过ajax总是返回0,即使我真的登录了Banana并且直接访问链接时给了我1。 Banana的开发人员如何解决这个问题?
如果它是服务器端电话,我会理解它,但我不明白为什么它不会告诉我,如果我登录,如果Banana提出请求。运行session_id()
检查,它会通过ajax每次调用生成一个新的,当直接访问它时工作正常并保持不变。
是否有任何修复或其他方法可以做到这一点?
答案 0 :(得分:8)
每个入口点或对服务器(API)的调用都需要在开头session_start()
。如果它没有读入会话标识符,它将表现为没有会话标识符,然后返回新的会话标识符。当您的浏览器获得响应时,它将使用新的会话标识符覆盖会话标识符。确保在您调用服务器的所有位置的顶部都有session_start()
,以便它知道要使用的会话。
答案 1 :(得分:6)
实际上没有足够的信息来明确回答这个问题。但是,根据这些信息,我们可以告诉您。
如果您正在使用标准的PHP会话处理程序,会话cookie将具有与之关联的域(如果未在php.ini中配置或在您的代码中可能只是域中的脚本最初是从中调用的)。例如,如果您调用从域www.stackoverflow.com调用session_start()
的脚本而chat.stackoverflow.com 上的另一个脚本启动会话,则无法访问域{{3}的cookie因此将开始一个新的会话。
Cookie标头中的域名可以冒泡,但不会崩溃。因此,如果您希望会话cookie能够访问Banana.com
的所有子域,则必须确保在每个具有该域的会话初始化请求中正确设置域参数。
有关详细信息,请参阅www.stackoverflow.com和session_set_cookie_params
Cookie可用的域。将域设置为“www.example.com”将使www子域和更高子域中的cookie可用。可用于较低域名的Cookie(例如“example.com”)可用于更高的子域名,例如“www.example.com”。仍旧实施已弃用的RFC 2109的旧版浏览器可能需要领先。匹配所有子域。
此外,您应该注意,将安全或 http_only 参数设置为true时发送的Cookie将无法通过不安全或JavaScript启动的连接进行读取,例如在的Ajax
答案 2 :(得分:4)
您获得新会话ID的原因是
PHPSESSID
)那该怎么办?
答案 3 :(得分:2)
而不是调用api并检查会话是否处于活动状态。会话ID存储在cookie中,如果指定了在配置文件中存储会话ID的位置,或者您可以实际检查是否使用以下代码设置会话ID
session_start();
$session_id=session_id();
if(isset($_SESSION[$session_id]))
答案 4 :(得分:0)
原始代码和/或ajax代码中的某些内容正在设置会话保存处理程序。因此,例如,您的来源可能是将会话保存到数据库,而ajax脚本将会话保存到文件。