如何在jsp和php中使用相同的cookie?

时间:2014-08-30 06:50:58

标签: php jsp cookies

我需要在php中使用必须在jsp中创建的cookie。

我试过如下。 用于创建cookie的Jsp代码:

Cookie userNamecookie = new Cookie ("username", snUser.getUsername());

读取cookie的PHP代码:

<?php
if (isset($_COOKIE["username"]))
  echo "Welcome " . $_COOKIE["username"] . "!<br>";
else
  echo "Welcome guest!<br>";
?>

但是我无法在php中读取cookie。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

Cookie访问仅限于域和路径。如果cookie位于不同的域或路径中,则浏览器不会将cookie发送回服务器。如果在将其添加到响应之前未通过Cookie#setPath()显式设置路径,则默认为当前URI。换句话说,只有JSP本身和同一文件夹或子文件夹中的所有其他JSP都可以访问cookie。

如果PHP代码在同一个域中运行,但路径不同,则需要将cookie路径显式设置为/

Cookie usernameCookie = new Cookie("username", user.getName());
usernameCookie.setPath("/");
response.addCookie(usernameCookie);

如果PHP代码恰好在不同的子域中运行,例如php.example.com代替jsp.example.com,您需要明确将Cookie域设置为常用域。

Cookie usernameCookie = new Cookie("username", user.getName());
usernameCookie.setDomain(".example.com");
usernameCookie.setPath("/");
response.addCookie(usernameCookie);

(是的,领先期间很重要)

如果PHP代码碰巧在不同的域中运行,那么关于cookie共享的故事就结束了。您可以更好地存储您想要在公共数据库中共享的数据,并将其唯一键作为请求参数传递,如果有必要,可以使用UUID。


那就是说,观察到你明确地说过&#34; jsp code&#34;是非常可怕的。而不是&#34; servlet代码&#34;甚至&#34; java代码&#34;。我认为现在是时候阅读How to avoid Java code in JSP files?our servlets wiki page了。此外,观察您在cookie中携带用户名也很可怕。你知道饼干可以被客户操纵吗?即最终用户可以轻松地从例如编辑cookie值。 &#34; John Doe&#34;到#34; Joe Bar&#34;。它并不完全清楚你的具体功能要求是什么,但你至少应该绝对不要使用这种方法,以防你需要一些&#34;单点登录&#34;跨相同(子)域的PHP和JSP页面。而是将UUID的种类存储为cookie值,该值链接到共享数据库。