相同的php会话名称

时间:2013-12-29 03:52:18

标签: php session

我有两个相同的php网站(网站A和B)。网站如下。

php网站

<?php

session_start();

if(isset($_SESSION['user'])){

  echo "Welcome " . $_SESSION['user'];

}else{

  if(isset($_POST['userName'])){

    $_SESSION['user'] = $_POST['userName'];

  }

}

?>

我通过html表单将值userName = Bear发布到网站。 用same browser打开B网站后,它会输出这个 欢迎熊

B网站会话is not set。但是B仍然有一个网站会议。 A website and B website in same computer

我如何解决它? 除了更改会话名称或更改浏览器。 还有其他方法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

编辑#2

然后尝试一下。这将检查会话是否已设置且不为空。

<?php
session_start();
$_SESSION['user'] = $_POST['userName'];

if(isset($_SESSION['user']) && (!empty($_SESSION['user']))){ 
echo "Welcome " . $_SESSION['user'];
}

else {
echo "Sorry you do not have access.";
}
?>

假设您的表单类似于:

<form method="post" action="session_file.php">
     Username: <input type="text" name="userName">
     <br><br>
     <input type="submit" name="submit" value="Submit">
 </form>

OLD

根据您的original question


sesstion_start();拼写错误

使用session_start();

另外,你错过了$_SESSION['user'] = $_POST['userName']

中的分号

另一个原因是您没有将POST用户名分配给SESSION名称。

即:(我在下面添加)

$_SESSION['user'] = $_POST['userName'];
根据下面的HTML表单操作

PHP (session_file.php)

<?php

session_start();

if(isset($_SESSION['user'])){

$_SESSION['user'] = $_POST['userName'];

echo "Welcome " . $_SESSION['user'];

}else{

if(isset($_POST['userName'])){

$_SESSION['user'] = $_POST['userName'];

}

}

// var_dump($_SESSION['user']); // for testing purposes

?>

编辑(如果已存在,则添加session_destroy()

与以下HTML表单(PHP)结合使用

如果会话已经存在,例如Bear使用如下所示的表单,则不会显示它,因为它将检查会话是否已经存在,如果会话确实存在,它将销毁它并创建一个新的,将在下一页回显新名称。

<?php
session_start();
if(isset($_SESSION['user'])){
session_destroy();
}
?>

<form method="post" action="session_file.php">
     Username: <input type="text" name="userName" value="<?php echo $_SESSION['user']; ?>">
     <br><br>
     <input type="submit" name="submit" value="Submit">
 </form>

答案 1 :(得分:0)

会话与浏览器一起维护。当一个用户使用浏览器登录时,其他用户无法使用同一浏览器登录。因为浏览器已经在运行一个会话。如果您尝试登录,它会为您提供正在运行的当前会话。出于这个原因,您将获得欢迎熊何时尝试使用Account B登录,而Account A已经登录。请举例Gmail您无法登录两个Gmail帐户相同的浏览器simultanioulsy。因此,在使用两个帐户登录时,最好使用不同的浏 use Diffrent Browser.

答案 2 :(得分:0)

您可以使用命名会话来实现此目的,但它不是完全证明的,因为它依赖于GET变量。以下是使用get变量userName

实现的示例
if($_GET['userName']) {

    session_name($_GET['userName']);

}

session_start();

由于session_name获取或设置了一个命名会话,取决于它是否已存在,只要会话标识符与请求一起传入,上述操作就会起作用。如果URL被修改并且请求是在没有标识符的情况下进行的,那么您可能希望在您认为合适的情况下处理该请求(销毁任何现有会话并启动新会话,基于cookie回退到会话等)。

另外,我认为将实际会话名称设为“bob123”可能会带来安全风险,因为如果你知道它的用户名总是很容易窃取别人的会话,所以你应该研究如何减少这种风险。