传递会话变量并关闭cookie

时间:2016-08-12 19:42:27

标签: php session

我试图在我创建的两个页面中传递会话变量。我的浏览器关闭了Cookie(firefox最新版本),但是我收到了错误消息。这是我的代码

的index.php

<?php

session_start();

$_SESSION['name'] = "bob";

?>
<p>
    go to next page <a href="session.php?<?php echo SID; ?>">click here</a>.
</p>

session.php文件

<?php

session_start();

echo $_SESSION['name'];

?>

PHP无法识别$ _SESSION [&#39; name&#39;]索引并输出以下错误

注意:未定义的索引:第3行的C:\ xampp \ htdocs \ S2 \ session.php中的名称

注意:我在php.ini文件session.use_trans_sid = 1

上启用了trans_sid

2 个答案:

答案 0 :(得分:0)

我重新创建了您的方案,对我来说有用的是将这些设置放在 session_start()之前:

$computer = $Env:ComputerName
$text = "C:\accounts.csv"
$user = import-csv -path $text
$ObjOU = [ADSI]"WinNT://$computer"
   foreach($strUser in $user)
{
 $user = $struser.user
 $password = $struser.password
 $description =  $struser.description
 $group = $struser.group
 Clear-Host
 If($user -notin ($ObjOU.Children|Where{$_.SchemaClassName -eq  'user'}).Name){
    $objUser = $objOU.Create("User", $user)
    $objUser.setpassword($password)
    $objUser.put("description",$description)
    $objUser.SetInfo()
 }
 $objGroup = [ADSI]"WinNT://$computer/$group"
 $objGroup.add("WinNT://$computer/$user")
 $objGroup.SetInfo()
}

我希望这能解决你的问题。当然你也可以编辑你的php.ini而不是硬编码。

我想补充的是,如果有人获得您的会话ID,使用trans_sid可能会产生安全漏洞。之前进行一些IP检查,并限制只访问创建会话ID的IP。请注意,如果使用旧会话ID的旧链接,使用trans_id也可能会破坏您的应用。

链接:https://stackoverflow.com/a/3740866/6622577

答案 1 :(得分:0)

一定要注意谨慎,在URL中传递会话ID是一种安全风险,绝对不可取

session.use_trans_sid设置为true,这是填充SID常量的内容,您还需要将session.use_only_cookies设置为false,否则PHP会查找饼干首先。

参考:

session.use_trans_sid实际上是一个PHP 4特性,当与具有--enable-trans-sid编译时标志的PHP构建一起使用时,将使用SID常量透明地填充相对URL。 / p>

From the manual

  

PHP能够透明地转换链接。除非您使用的是PHP 4.2.0或更高版本,否则在构建PHP时需要手动启用它。在Unix下,传递--enable-trans-sid进行配置。如果启用此构建选项和运行时选项session.use_trans_sid,则相对URI将更改为自动包含会话ID。

Also

  

注意:与基于Cookie的会话管理相比,基于URL的会话管理具有额外的安全风险。用户可以通过电子邮件将包含活动会话ID的URL发送给他们的朋友,或者用户可以将包含会话ID的URL保存到他们的书签,并始终使用相同的会话ID访问您的站点,例如。