PHP:站点重定向时会话变量不可用
-
09-06-2019 - |
题
我必须为我的校友小组管理一个小型网站,该网站由我的 ISV 托管。该网址类似于 www.myIsv.com/myWebSite/,非常难看且非常容易忘记。网络服务器的主管理员注册了一个域名 www.mysmallwebsite.com 并放置了一个包含以下内容的 index.html:
<html>
<head>
<title>www.mysmallwebsite.com</title>
</head>
<frameset>
<frame src="http://www.myIsv.com/myWebSite/" name="redir">
<noframes>
<p>Original location:
<a href="www.myIsv.com/myWebSite/">http://www.myIsv.com/myWebSite/</a>
</p>
</noframes>
</frameset>
</html>
它工作正常,但某些功能(例如 PHP 会话变量)不再工作!有人有纠正这个问题的建议吗?
编辑:这在 IE 和 Firefox 上都不起作用(无插件)
谢谢
解决方案
会话与服务器绑定 和 域。跨域使用框架集会导致各种破坏,因为这不是它的设计初衷。
尝试使用 apache mod rewrite 创建“直通重定向”,即“代理人" 规则中的 flag ([P]) 是您需要的魔法标志
其他提示
你是什么意思?您是说当您从 www.mysmallwebsite.com 访问 www.myIsv.com/myWebSite/ 时,PHP 会话会丢失吗?
PHP 通过 ID(服务器上生成的字母数字哈希值)来识别会话。ID 使用名为 PHPSESSID 或类似内容的 cookie 在请求之间传递(您可以在浏览器的帮助下查看网站设置的 cookie...在 Firefox 上,您有 Firebug + FireCookie 和精彩的 Web 开发工具栏...使用它您可以毫不费力地查看cookies列表)。
所以 ...PHP 通过 PHPSESSID cookie 传递会话 ID。但您可以将会话 ID 作为普通 GET 请求参数传递。
因此,当您将html链接放置到丑陋的域名时,假设它是同一个PHP服务器(初始化了相同的会话),您可以这样放...
www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>
我已经有一段时间没有使用 PHP 了,但我认为这会起作用。
如果你点击会话变量会起作用吗 http://www.myIsv.com/myWebSite/ 直接地?在我看来,服务器配置将决定会话是否有效。但是,如果您以某种方式在 www.mysmallwebsite.com 上启动会话(看起来不像您正在使用 PHP,但也许您正在使用),那么您将无法在不编写一些后端的情况下传输会话数据将会话从一个服务器移动到另一个服务器的逻辑。
在脚本开头粘贴 session_start() 并查看是否可以再次访问变量。
它不起作用,因为客户端会话是针对每个域的。所有 cookie 都保存在 mysmallwebsite.com 中,因此 myIsv.com 无法访问它们。
@pix0r www.myIsv.com/myWebSite/ -> 会话变量工作 www.mysmallwebsite.com -> 会话变量不起作用
@Alexandru 不幸的是,这不在同一个网络服务器上
您有什么浏览器/广告?可能是您的浏览器或某些其他软件(甚至可能是网络服务器)阻止了会话 http://www.myIsv.com/myWebSite/ 从框架内工作,因为它位于不同的站点,认为这是 XSS 攻击。
如果会话工作于 http://www.myIsv.com/myWebSite/ 没有框架,您始终可以从以下位置重定向 http://www.mysmallwebsite.com 到丑陋的网址,而不是使用框架。
编辑:我刚刚在我的一个使用会话的网站上尝试了你的框架代码,firefox 工作正常,我登录并保持登录状态,但 IE7 再次直接将我登录。
因此,当您将html链接放置到丑陋的域名时,假设它是同一个PHP服务器(初始化了相同的会话),您可以这样放...
www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>
从安全角度来看,我真的真的希望这不起作用
您还可以在用户端设置一个 cookie,然后在重定向后直接检查该 cookie 是否存在,如果您担心友好的 URL,则意味着您不必在查询字符串中传递 PHPSESSID 。
当人们到达@ www.mysmallwebsite.com 时,我会重定向到 http://www.myIsv.com/myWebSite/
<?php header('Location: http://www.myIsv.com/myWebSite/'); ?>
这就是我在 www.mysmqllwebsite.com/index.php 中所拥有的全部内容
这样您就不必担心 browserdr 兼容性,或者会话是否正常工作,只需执行重定向,就可以了。