PHP:会话变量在重定向站点时不可用

时间:2008-09-01 20:17:28

标签: php session session-variables

我要为我的校友小组管理一个由我的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上都没有用(没有插件)

由于

10 个答案:

答案 0 :(得分:4)

会话与服务器 AND 绑定。在域中使用框架集将导致所有类型的破坏,因为这不是它的设计方式。

尝试使用apache mod rewrite创建“passthrough重定向”,规则中的“代理”标志([P])是您需要的魔术标志

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

上的文档

答案 1 :(得分:0)

你是什​​么意思? 你是说当你从www.mysmallwebsite.com转到www.myIsv.com/myWebSite/然后PHP会话丢失了吗?

PHP识别具有ID的会话(在服务器上生成的字母数字哈希)。使用名为PHPSESSID的cookie或类似的ID将ID从请求传递到请求(您可以在浏览器的帮助下查看网站设置的cookie ...在Firefox上,您有Firebug + FireCookie和精彩的Web开发人员工具栏..用它可以毫不费力地查看饼干列表。

所以...... PHP正在通过PHPSESSID cookie传递会话ID。但是您可以将会话ID作为普通的GET请求参数传递。

因此,当您将html链接放置到丑陋的域名时,假设它是相同的PHP服务器(初始化相同的会话),您可以这样设置它......

www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>

我暂时没有使用过PHP,但我认为这样可行。

答案 2 :(得分:0)

如果直接点击http://www.myIsv.com/myWebSite/,会话变量是否有效?在我看来,服务器配置将决定会话是否有效。但是,如果你以某种方式在www.mysmallwebsite.com上开始一个会话(看起来你不是在使用PHP,但也许你就是这样),你将无法在不写一些后端的情况下传输会话数据将会话从服务器移动到服务器的逻辑。

答案 3 :(得分:0)

将session_start()粘贴在脚本的开头,看看是否可以再次访问变量。

答案 4 :(得分:0)

它不起作用,因为客户端会话是每个域。所有的cookie都是为mysmallwebsite.com保存的,因此myIsv.com无法访问它们。

答案 5 :(得分:0)

@ pix0r www.myIsv.com/myWebSite/ - &gt;会话变量工作 www.mysmallwebsite.com - &gt;会话变量不起作用

@Alexandru 不幸的是,这不在同一个网络服务器上

答案 6 :(得分:0)

你有什么浏览器/广告?它可能是你的浏览器或其他一些软件(甚至可能是网络服务器)阻止来自http://www.myIsv.com/myWebSite/的会话在框架内工作,因为它位于不同的网站上,认为它是XSS攻击。 / p>

如果会话在http://www.myIsv.com/myWebSite/处不在框架内工作,您可以随时从http://www.mysmallwebsite.com重定向到丑陋的网址,而不是使用框架。

编辑: 我刚刚在我的网站上尝试过使用会话的框架代码,firefox工作正常,我登录并保持不变,但IE7再次让我直接登录。

答案 7 :(得分:0)

  

因此,当您将html链接放置到丑陋的域名时,假设它是相同的PHP服务器(初始化相同的会话),您可以这样设置它......

     

www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>

从安全的角度来看,我真的非常希望这不起作用

答案 8 :(得分:0)

你也可以在用户端设置一个cookie,然后在重定向后直接检查该cookie是否存在,如果你对友好的URL感到困扰就意味着你不必传递一个PHPSESSID查询字符串。

答案 9 :(得分:0)

当人们到达@ www.mysmallwebsite.com时,我只想重定向到http://www.myIsv.com/myWebSite/

<?php header('Location: http://www.myIsv.com/myWebSite/'); ?>

这就是我在www.mysmqllwebsite.com/index.php中所拥有的一切 这样你就不必担心浏览器的兼容性,或者讨论会话的工作情况,只做redirct,你会很好。