我用它来隐藏链接,直到用户登录后,我只是想知道这是否会导致生产代码中的任何安全问题或其他问题?我一直在测试它并且找不到问题,因为网站在用户登录之前不会给出 session_id。
if(session_id()){echo '<a href="./ewo.php" target="_self"> EWO </a>'...
确保添加一个功能,该功能将在会话被破坏后立即将用户重定向到登录页面,即注销。
此外,正如@Saeed Ansari 所提到的,向您的项目添加一些逻辑,以便在没有活动会话或用户未登录时仅呈现登录页面。
HTH。
无论哪种方式,如果您的解决方案只是在用户登录之前“隐藏此链接”,那么这不是建设性代码。
当用户登录时,您应该在会话中注册一个用户对象或用户 $_SESSION 标识符。
例如。用户登录,您设置一个标志 $_SESSION['Username'] = "Bob",其中 Bob 是用户的用户名。
然后在您的代码中,您可以执行以下操作:
if(array_key_exists('Username', $_SESSION)) { echo '<a href="./ewo.php" target="_self"> EWO </a>'; }
然后当用户成功登录您的站点时,在 $_SESSION 中注册他们的用户名(至少),即
$_SESSION['Username'] = 'Bob';
通过使用会话变量来完全控制会话是一个好主意,而不是仅仅依赖于会话是否具有 ID。
假设永远不安全,因此我还建议(如果您还没有这样做)检查 ewo.php 文件中的相同内容...检查会话是否具有注册的用户名/等,如果没有header('Location: /');
重定向例如,将用户重定向回主页。
在您将会话检查也放入文件中之前,此代码没有问题
如果未设置会话 ID,则将它们发送回主页。因为如果用户知道 URL,那么他们可以导航到链接
你可以通过会话来做到这一点。
如果您想检查是否在会话中设置了变量(用户已登录),请使用:
<?php
session_start();
if (isset($_SESSION['username'])) {
echo "Your link here";
} else {
echo "login first";
}
?>