2014-08-28 84 views
4

我在网站上使用CORS。CORS与PHP会话

代码示例:

header("Access-Control-Allow-Origin: *"); 
session_start(); 
$session_id = session_id(); 

此代码工作正常,但它每次都返回一个新的会话ID。

如何在这种情况下维护会话数据?

回答

5

虽然您允许使用Access-Control-Allow-Origin标头从外部域进行访问,但会话本身是基于cookie的。

如果发出请求的脚本是从外部域传递的,它将无法读取cookie并将其传递到您的服务器。

解决方案:从与AJAX服务相同的上下文(即相同的协议/域/端口)发送进行调用的JS。还要确保cookie本身不限于不同的子域或路径。

不要尝试通过POST或GET请求传递会话标识符,这会使您的应用程序容易受到CSRF的影响。

顺便说一句,将允许的原点设置为*也是不鼓励的,因为它也可以用于XSS/CSRF,并与其他技术结合使用。请限制对第三方域的请求。

最后但并非最不重要的,您可能还想通过HTTP OPTIONS查看预检请求的主题。