如何实现"首先登录访问网页"?

时间:2015-01-26 18:15:07

标签: php html html5 login

基本上我在我的网站上有某些页面,如果用户已登录,我只想显示。但我唯一的想法是使用Bootstrap来表达,如果用户登录该类应该是{{ 1}}(显示内容),否则show ..但我不相信这是一个很好的方法。 (显示和隐藏来自Bootstrap的类)

基本上我正在使用API​​,因此查看内容的唯一可能性是无论如何都要登录,但是我仍然想说"首先登录查看您的数据"而不是只显示没有任何内容的空白页面。

你能给我一些想法吗?

我想到了这样的事情:

hide

4 个答案:

答案 0 :(得分:1)

我不能说我喜欢这里的任何答案,所以我觉得有必要提供自己的答案。

我在你的评论中看到你有办法检查是否有人登录。因此,你已经完成了基本的基础工作。你发布的代码真的是你应该做的基本想法。毕竟,编程基于真/假逻辑。然而,很明显,三元运算符并不是处理此问题的最佳方法。

有很多方法可以处理你的情况,但我会这样做:

<?php
/* ... your check if the user is logged in, includes, etc. */

// Request that the client disable caching:
header("Cache-control: no-store, no-cache, must-revalidate");
header("Expires: " . gmdate("D, d M Y H:i:s", (time() + 2)) . " GMT");
header("Date: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// Check if the user is allowed to access the content:
if( false == $isLoggedIn ){
    // the user is not logged in and no private data should be shown
    header("Location: /login.php?error=" . urlencode("You must login to access the content."),
           true, // override any previously set Location header
           302 // inform the client/browser that this redirect is temporary and should not be cached as a permanent action
          );
    die("You must login <a href='/login.php?error=" . urlencode("You must login to access the content.") . "'>here</a>.");
}

// If the script is executing at this point, we know the user is logged in.

/* ... Your code for handling the API ... */

?>

这里的重要关键是die()功能。此函数可防止脚本执行任何进一步操作。在某种程度上,您可以将其视为函数的return语句。如果函数在其中执行了return语句,则不会执行该return语句后面的任何代码。这是同样的原则。如果不允许用户进入该位置,则会发回一些有关错误的信息(在本例中为重定向和短消息),然后终止所有进一步的执行。否则,重定向和终止都不会发生。

这就是说,重要的是你 NOT 只需使用showhide来处理未经授权的访问尝试。我以前曾经在一些网站上(主要是我的一个朋友)进行了讨论,这与他正在做的事情类似。在他的情况下,他有一个管理页面,只有管理员应该能够访问。如果用户在没有管理员权限的情况下访问该页面,他会将302重定向发送回登录页面,在该页面中他显示一条错误消息,指出用户没有足够的权限访问管理页面。但是,就像简单地使用showhide一样,他仍然在页面的正文中发回管理控制面板,但由于重定向到登录页面,管理面板将不会显示为未经授权的用户。

设置showhide来处理此类问题非常类似于重定向用户,但仍然会发回他/她想要的内容。使用Charles Proxy,我可以将他的302 redirect重写为200 OK,然后查看整个管理面板。如果您使用showhide,未经授权的用户只需查看HTML源代码,仍然可以看到他们不应该看到的所有内容。

这就是当用户尝试访问没有正确身份验证的网页时,您必须致电die()exit()的原因。

作为补充说明:只要您拨打die( <some message telling them they must login> );,就不必将用户重定向到登录页面或错误页面。我的例子仅仅因为我的个人偏好而重定向。

答案 1 :(得分:0)

由于您使用的是php,请按照以下步骤操作:

  • 创建注册表单
  • 在会话中保存用户名和密码
  • 然后将用户重定向到登录表单
  • 现在用户可以使用他的凭据登录。登录后,将值存储在会话中。
  • 使用此标识符,让您的用户永远登录。
  • 注销时,请清除会话值并重定向到注销页面。

浏览此链接:Simple Login Appliction using PHP

答案 2 :(得分:0)

将以下内容放在要为非登录成员

限制的任何页面的顶部
<?php
session_start();
include_once "logd_user.php";
?>

创建logd_user.php文件

在logd_user.php文件中,您可以创建一个变量来保存用户名和密码(即如果您希望所有用户使用相同的用户名和密码登录,则将用户名和密码存储在MySQL数据库表中)。

如果用户未登录,则应显示“首先登录以查看您的数据”,以及用户登录的表单。

处理logd_user.php文件,让我看看你能想出什么。

我可能会给你完整的代码

答案 3 :(得分:-1)

这很简单,但我需要看一些代码,有点像这样 如果($ loggedin == TRUE){ 显示页面 } ELSE { 不显示页面 }