我有两个相同的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
。
我如何解决它? 除了更改会话名称或更改浏览器。 还有其他方法吗?
谢谢!
答案 0 :(得分:0)
然后尝试一下。这将检查会话是否已设置且不为空。
<?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>
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”可能会带来安全风险,因为如果你知道它的用户名总是很容易窃取别人的会话,所以你应该研究如何减少这种风险。