PHP方法隐藏链接,直到用户登录


PHP method to hide link until user logged in

我用它来隐藏链接,直到用户登录后,只是想知道这是否会导致生产代码中的任何安全问题或其他问题?我一直在测试它,但到目前为止找不到问题,因为网站在用户登录之前不会给出session_id。

if(session_id()){echo '<a href="./ewo.php" target="_self"> EWO </a>'... 

在您将会话检查也放入文件中之前,此代码没有问题

如果未设置会话ID,则将它们发送回主页。因为如果用户知道URL,那么他们可以导航到链接

确保添加一个函数,一旦会话被销毁,即注销,该函数会将用户重定向到登录页面。

此外,正如 @Saeed Ansari 所述,向项目添加一些逻辑,以便在没有活动会话或用户未登录时仅呈现登录页面。

呵。

无论哪种方式,如果您的解决方案只是"隐藏此链接"直到用户登录,这不是建设性代码。

您应该在会话中注册用户对象或用户 $_SESSION 标识符,以便在用户登录时使用。

例如。 用户登录后,您设置了一个标志 $_SESSION['用户名'] = "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: /');例如,将用户重定向回主页。

您可以通过会话执行此操作。

如果要检查变量是否在会话中设置(用户已登录),请使用:

<?php
session_start();

if (isset($_SESSION['username'])) {
   echo "Your link here";
} else {
   echo "login first";
}
?>