为什么会话在网站的主目录中不起作用
Why sessions are not working in home directory of website
在我的网站上,登录后设置了会话,但它们在主目录的文件中不起作用,但它们在其他目录(如 /admin)中起作用。
可能是我的 robots.txt 文件有问题。
这是 robots.txt 文件的代码-
User-agent: *
Disallow: /cgi-bin/
Disallow: /admin/
Disallow: /*?*
我的导航栏代码-
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href=""><?php echo website_name; ?></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item ">
<a class="nav-link" href="<?php echo location; ?>">Home </a>
</li>
<li class="nav-item ">
<a class="nav-link" href="dashboard.php">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link " href="about-us.php" >About Us</a>
</li>
<li class="nav-item">
<a class="nav-link " href="contact-feedback.php" >Contact Us / Feedback</a>
</li>
<li class="nav-item">
<a class="nav-link " href="privacy-policy.php" >Privacy Policy</a>
</li>
<?php
session_start();
if (isset($_SESSION['loggined'])){
echo '<li class="nav-item">
<a class="nav-link " href="wins.php">My Wins</a>
</li>';
}
?>
<?php
if (isset($_SESSION['admin'])) {
echo '
<li class="nav-item">
<a class="nav-link " href="admin/Web_ManageMent" >Admin Panel</a>
</li>
';
}
?>
</ul>
<?php
if (!isset($_SESSION['loggined']) ) {
echo '
<div class="row">
<button class="btn btn-sm btn-primary mx-3 my-2" data-toggle="modal" data-target="#loginModal" id="loginBtn">Login</button>
<button id="signupBtn" class="btn btn-sm btn-primary my-2" data-toggle="modal" data-target="#signupModal" >Sign Up
</button>
</div>
';
} else {
echo '
<hr>
<span class="text-white">Welcome , '.$_SESSION['name'].'</span>
<br>
<button class="btn btn-sm btn-primary mx-3 my-2"><a class="text-white" href="registration/logout.php">Log Out</a></button>
';
}
?>
</div>
</nav>
<?php
include("modals/signup.php");
include("modals/login.php");
?>
我在login.php
设置会话的地方
$_SESSION["loggined"] = true;
$_SESSION["username"] = $username;
$_SESSION["name"] = $row['display_name'];
$_SESSION['id'] = $row['user_id'];
header("location: dashboard.php");
/admin 中的导航栏 - Navigation Bar
主目录文件中的导航栏 - Navigation Bar
因此会话在主目录中不起作用
您的 robots.txt
文件与 PHP 完全无关。 纯粹是如何告诉道德机器人要索引哪些文件。
PHP 中会话“不工作”的常见问题是由于 session_start();
未被调用。
请将以下代码添加到它们不起作用的页面顶部:
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
老实说?我输入 session_start()
已经超过 11 年了。为什么?因为,如果你在 2021 年 PHP 中赤裸裸地编写代码,那你就大错特错了。
请学习 Laravel 或任何现代框架。你、你的项目、你的同事、整个世界都会变得更好。
我每天编码 PHP,从字面上看,我从 2010 年开始就没有直接搞乱过 $_SESSION[]
。这就像在 JavaScript 中做 document.getElementById('foo');
。也请不要那样做 ;-)
P.S。您可能会考虑学习如何设计无状态 PHP 应用程序,依靠前端 AJAX 通过 localStorage.getItem('key')
存储状态,使用 JWT 令牌 (tymon/jwt-auth) 作为身份验证系统。
事实上,这就是过去 5 年我们一直在努力的方式。
请阅读这篇文章:
在我的网站上,登录后设置了会话,但它们在主目录的文件中不起作用,但它们在其他目录(如 /admin)中起作用。
可能是我的 robots.txt 文件有问题。 这是 robots.txt 文件的代码-
User-agent: *
Disallow: /cgi-bin/
Disallow: /admin/
Disallow: /*?*
我的导航栏代码-
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href=""><?php echo website_name; ?></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item ">
<a class="nav-link" href="<?php echo location; ?>">Home </a>
</li>
<li class="nav-item ">
<a class="nav-link" href="dashboard.php">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link " href="about-us.php" >About Us</a>
</li>
<li class="nav-item">
<a class="nav-link " href="contact-feedback.php" >Contact Us / Feedback</a>
</li>
<li class="nav-item">
<a class="nav-link " href="privacy-policy.php" >Privacy Policy</a>
</li>
<?php
session_start();
if (isset($_SESSION['loggined'])){
echo '<li class="nav-item">
<a class="nav-link " href="wins.php">My Wins</a>
</li>';
}
?>
<?php
if (isset($_SESSION['admin'])) {
echo '
<li class="nav-item">
<a class="nav-link " href="admin/Web_ManageMent" >Admin Panel</a>
</li>
';
}
?>
</ul>
<?php
if (!isset($_SESSION['loggined']) ) {
echo '
<div class="row">
<button class="btn btn-sm btn-primary mx-3 my-2" data-toggle="modal" data-target="#loginModal" id="loginBtn">Login</button>
<button id="signupBtn" class="btn btn-sm btn-primary my-2" data-toggle="modal" data-target="#signupModal" >Sign Up
</button>
</div>
';
} else {
echo '
<hr>
<span class="text-white">Welcome , '.$_SESSION['name'].'</span>
<br>
<button class="btn btn-sm btn-primary mx-3 my-2"><a class="text-white" href="registration/logout.php">Log Out</a></button>
';
}
?>
</div>
</nav>
<?php
include("modals/signup.php");
include("modals/login.php");
?>
我在login.php
设置会话的地方$_SESSION["loggined"] = true;
$_SESSION["username"] = $username;
$_SESSION["name"] = $row['display_name'];
$_SESSION['id'] = $row['user_id'];
header("location: dashboard.php");
/admin 中的导航栏 - Navigation Bar
主目录文件中的导航栏 - Navigation Bar
因此会话在主目录中不起作用
您的 robots.txt
文件与 PHP 完全无关。 纯粹是如何告诉道德机器人要索引哪些文件。
PHP 中会话“不工作”的常见问题是由于 session_start();
未被调用。
请将以下代码添加到它们不起作用的页面顶部:
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
老实说?我输入 session_start()
已经超过 11 年了。为什么?因为,如果你在 2021 年 PHP 中赤裸裸地编写代码,那你就大错特错了。
请学习 Laravel 或任何现代框架。你、你的项目、你的同事、整个世界都会变得更好。
我每天编码 PHP,从字面上看,我从 2010 年开始就没有直接搞乱过 $_SESSION[]
。这就像在 JavaScript 中做 document.getElementById('foo');
。也请不要那样做 ;-)
P.S。您可能会考虑学习如何设计无状态 PHP 应用程序,依靠前端 AJAX 通过 localStorage.getItem('key')
存储状态,使用 JWT 令牌 (tymon/jwt-auth) 作为身份验证系统。
事实上,这就是过去 5 年我们一直在努力的方式。
请阅读这篇文章: