是否可以使用Apache使用当前URL编写cookie

时间:2013-10-09 14:39:13

标签: apache mod-rewrite cookies

我正在使用的第三方应用程序通常允许用户在网站的任何位置为页面添加书签。登录后,用户将被重定向到请求的原始页面。不幸的是,通过委托自定义的单点登录,此功能会丢失。也就是说,如果您使用书签访问产品中的特定页面(或获取电子邮件或关注外部链接),如果您尚未登录,请转到登录页面,然后返回主页应用程序页面而不是请求的页面。

如果我可以设置一个请求原始URL的cookie,那么我可以通过JavaScript使用该信息在登陆主页时更改位置。

假设主页是/app/index.jsp - 如果我能得到一个cookie来记住任何URL但是这个 - 我可以恢复用户登录后进入所请求页面的功能。这是可能?

1 个答案:

答案 0 :(得分:3)

我自己找到了解决方案...... 使用mod_rewrite我可以通过查找JSESSIONID cookie来键入初始请求。放入我的服务器虚拟主机部分后的下面实现了我的目标。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/app/*$
RewriteCond %{REQUEST_URI} !^/content/.*$
RewriteCond %{REQUEST_URI} !^/app/adm/.*$
RewriteCond %{REQUEST_URI} !^/app/index\.jsp$
RewriteCond %{REQUEST_URI} !^/favicon\.ico$
RewriteCond %{HTTP:Cookie} !^.*JSESSIONID=.*$
RewriteRule . - [co=appURI:%{REQUEST_URI}?%{QUERY_STRING}:.mydomain.com]

注意:我在上面添加了一些过滤器,用于我不想为其设置cookie的页面。我使用JavaScript来检测,取消设置cookie,并在应用程序中重定向以实现我的目标。

var appURI = getCookie("appURI");
if (typeof(appURI) != "undefined" && appURI != null && appURI != "") {
  mydomain.console.log("Found URI from SSO relocating to: " + appURI);
  setCookie("appURI", "", -1, "/", "mydomain.com");
  document.location.href = appURI;
}

请注意,上面的“setCookie”和“mydomain.console.log”是专有但简单的函数,可根据名称执行明显的操作。