我用这个来隐藏链接,直到用户登录,并且只是想知道这是否会导致生产代码中的任何安全问题或其他问题?我一直在测试它并且找不到问题,因为在用户登录之前网站不会给出session_id。
if(session_id()){echo '<a href="./ewo.php" target="_self"> EWO </a>'...
答案 0 :(得分:0)
在您对文件进行会话检查之前,此代码中没有问题
如果未设置会话ID,则将其发送回主页。因为如果用户知道该URL,则可以导航到该链接
答案 1 :(得分:0)
确保添加一个功能,一旦会话被销毁,就会将用户重定向到登录页面,即注销。
另外,如@Saeed Ansari所述,为项目添加一些逻辑,以便在没有活动会话或用户未登录时仅呈现登录页面。
HTH。
答案 2 :(得分:0)
无论哪种方式,如果您的解决方案只是“隐藏此链接”,直到用户登录,这不是建设性的代码。
您应在会话中注册用户对象或用户$ _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文件中的相同内容...检查会话是否有注册的用户名/ etc,如果例如,不重定向header('Location: /');
以将用户重定向回主页。
答案 3 :(得分:0)
您可以通过会话来完成。
如果您想在会话中检查是否已设置变量(用户已登录):
<?php
session_start();
if (isset($_SESSION['username'])) {
echo "Your link here";
} else {
echo "login first";
}
?>