2008-10-13 47 views
0

海!形式和没有饼干 - 优雅的方式提交表格

我有一个表格希望提交,但我需要添加PHPSESSID,因为有些客户端不允许cookies。

我的页面上有几个JavaScript函数,它们显示用户列表(搜索,排序,打开详细信息),页面由PHP生成。

现在我正在寻找一种优雅的方式,让我的表单每次提交都包含PHPSESSID - 这需要在多个页面上完成,所以我希望有一个简单的解决方案。将PHPSESSID添加到操作或隐藏字段中无法正常工作。

或者这个问题位于其他地方?它可能是客户端在太严格的防火墙之后。任何想法(尤其是解决方案;-))在这个方向也是受欢迎的!

实施例的代码(极度简化):

<form name="userlist" method="POST" action="./myuserlist.php"> 
[...some formfields and stuff..] 
</form> 

<script> 
//one example function, there are several on my page 
function next_page() 
{ 
    //set some hidden field to get the next page 
    document.forms[0].submit(); 
} 
</script> 

提前感谢!

再见, Basty

[编辑] session.use_trans_sid指定设置为true

回答

2

使用隐藏字段应该努力 - 如果它不那么session.use_trans_sid指定可能是关闭你的php.ini中

你可以把它添加到一个隐藏字段,然后说

if (!empty($_POST['PHPSESSID'])) 
    session_start($_POST['PHPSESSID']); 
else 
    session_start(); 
+0

Hoi! “隐藏领域应该工作” - 这里的关键是“应该”;)可悲的是它不。但我会尝试使用POST参数启动会话。 – bastiandoeen 2008-10-13 15:32:11

2

当你说把它放到一个隐藏的领域是行不通的,你能详细说明一下什么对它不起作用吗?

当面对每个(或很多)表单提交需要传递一些状态信息的情况时,输入类型=隐藏字段是执行此操作的规范方法。

只是在这里黑暗中猜测。你是在做一些类似于style =“display:none”或类似的输入吗?如果是这样,请将其改为真正的< input type =“hidden”>标记。很多浏览器不会提交通过显示隐藏的表单域:无。

黑暗中的另一个刺:你是否通过JavaScript添加隐藏窗体到页面?像foo.innerHTML调用一样?同样,一些浏览器不会正确处理以这种方式添加到页面的表单字段。您需要从一开始就将sessionid放在那里,或者重写您的ajax方法,该方法处理从服务器返回的数据以通过dom操作而不是innerHTML插入输入字段。