【问题标题】:Javascript form validation based on PHP session variables基于 PHP 会话变量的 Javascript 表单验证
【发布时间】:2013-03-18 18:00:08
【问题描述】:

我的网站有一个登录区域,登录时我设置了一个会话变量$_SESSION['logged_in'] = true

现在我也有很多表单和东西,用户可以输入 cmets。显然,在我的 PHP 验证中,我只使用 session 变量检查用户是否登录,但我也想要 javascript 验证,因为我可以让用户体验更流畅。

$("body").on("click", ".submit", function(e){
    e.preventDefault();
    if (user == logged in){
        ...AJAX call to php file....
    }
})

那么在我检查用户是否使用 javascript 登录时,人们通常如何做呢? IE if user == logged in

【问题讨论】:

  • 首先我会提到你也应该在后端进行验证。但是,要回答这个问题,你可以将 php 变量注入到 js 中......所以如果你有 $loggedIn = true,你可以这样做是 js:if (<?php echo $loggedIn ?>)
  • 这是人们做这件事的“方式”吗?它确实完成了工作,但不知何故我不太喜欢 javascript 和 php 的混合。

标签: php javascript validation


【解决方案1】:
  • 您当然可以通过 AJAX(例如使用 JSON)检查用户权限,但这会带来一些额外的延迟。

  • 您可以像这样将值写入全局 JS 范围:

    if ( userIsLogged() ) { echo "<script>document.mysite.userlogged = true;</script>"; }

    然后您可以检查 document.mysite.userlogged 变量。

  • 您也可以在 PHP 中设置一个 cookie,它可以在 JavaScript 中获得。要在 JS 中正确获取 cookie,请参阅:Javascript getCookie functions

  • 如果你不想注入 JS 代码,你可以设置一些属性,比如:

    <div id="comments" data-logged="<?php echo $isLogged; ?>"> ... </div>

    并通过 jQuery 获取:

    if ( $("#comments").attr('data-logged') == 1 ) {

  • 您可以通过生成 JS 文件为整个页面提供已记录/未记录的特定功能,例如:&lt;script type="text/javascript" src="http://yoursite.com/somefile.php"&gt; 并在 php 中动态生成,但要注意缓存!

如果你想个性化单个块,我个人会去 data-XXX 属性,如果你在 JS 中多次检查记录的条件,我会去全局 JS 变量。

【讨论】:

  • 谢谢,这看起来很棒。我能问一下为什么您可以调用变量 {document.mysite.userlogged} 而不仅仅是 {userlogged} 吗?
  • userlogged 可以,但要注意 javascript 作用域和闭包,document.... 清楚地表明我们考虑全局变量。另外,如果你想先设置document.mysite.variable,你必须document.mysite = {}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多