【问题标题】:save user session as a variable将用户会话保存为变量
【发布时间】:2014-05-26 14:34:51
【问题描述】:

对 php 还很陌生,所以请多多包涵。

我正在使用一个简单的模板系统,我将一个变量设置为 [%PLACEHOLDER%],然后当我使用与之关联的 [%TAG%] 时,它会在模板页面上输出存储在变量中的数据。

我这样做是因为我喜欢将所有 php 和 html 分开,以便在用户不了解 php 的情况下更轻松地创建不同的主题和模板。

一个简单的例子是:

(object) $tpl = new Tmpl( array( 'file' => 'templates/header.tpl' ) );

$tpl->replace( '[%USER%]', $user);
echo $tpl->output();

现在这一切正常。我想要做的是将用户会话保存为变量,以便我为其分配占位符标签。

我将以下代码与 php 页面一起使用

<div id="logedin" class="<?php echo (isset($_SESSION['sess_user_id'])) ? 'show' : 'hide'; ?>">
Welcome, <?php echo $_SESSION["sess_username"] ?>

基本上,如果用户登录,则会显示 div id 'logedin'。如果不是隐藏的。

我为此使用了 2 种 css 样式。

.show{
 display: block;
}
.hide{
 display: none;
}

我想要做的是保存 (isset($_SESSION['sess_user_id'])) 吗? '显示隐藏';作为变量,我可以将其分配为占位符。

类似这样的东西(但这显然不起作用,因此我问这个问题)

$sessionclassshow = (isset($_SESSION['sess_user_id'])) ? 'show' : 'hide';
$sessionclasshide = (isset($_SESSION['sess_user_id'])) ? 'hide' : 'show';

然后我将它们分配为这样的占位符

$tpl->replace( '[%CLASSSHOW%]', $sessionclassshow);
$tpl->replace( '[%CLASSHIDE%]', $sessionclasshide);

所以我可以在我的模板文件中的任何地方显示或隐藏一个 div,这取决于用户是否登录。

<div id="topmenu" class="[%SESSIONHIDE%]"><a href="login.html">Login</a></div>
<div id="welcome" class="[%SESSIONSHOW%]">welcome [%USER%]</div>

因此,如果用户已登录,则隐藏 'topmenu' div 并显示 'welcome' div,反之亦然。

我希望我已经解释得很好,并感谢任何帮助

谢谢 李

【问题讨论】:

  • 您可以添加一个名为“onlinestatus”(或类似名称)的列(到包含用户信息的任何表,例如用户名和 login_id 等)。当用户登录时,'onlinestatus' 设置为 'online',然后根据此设置你的 css 类或内联样式(类似地,当用户注销时,将 onlinestatus 设置为 'offline')
  • @TheOneandOnlyChemistryBlob - 当用户没有注销并且会话结束时会发生什么?
  • 对不起...没看到 Javascript 不是标签。使用 Javascript 我会设置 x 分钟的不活动超时 --> 自动注销

标签: php session session-variables


【解决方案1】:

您可以这样分配它们:

$tpl->replace( '[%CLASSSHOW%]', $sessionclassshow);
$tpl->replace( '[%CLASSHIDE%]', $sessionclasshide);

但是在模板中你使用%SESSIONXXXX%,而你应该使用%CLASSXXXX%(在他们的声明中)。

这应该可行:

<div id="topmenu" class="[%CLASSHIDE%]"><a href="login.html">Login</a></div>
<div id="welcome" class="[%CLASSSHOW%]">welcome [%USER%]</div>

【讨论】:

  • 我多么愚蠢。我更改了名称,但在模板文件中没有这样做。感谢您指出这一点,它现在完美运行
猜你喜欢
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多