当一个人登录我的网站时,我需要检查数据库中的roleid值,并依赖于我需要允许/拒绝访问页面.
我有这个代码,但它说$ _SESION变量'Access'是未定义的,我不明白为什么?
$email = mysql_real_escape_string($_POST['email']);
$password = md5(mysql_real_escape_string($_POST['password']));
$checklogin = mysql_query("SELECT * FROM person WHERE email = '" . $email . "' AND password2 = '" . $password . "'");
if (mysql_num_rows($checklogin) == 1) {
$row = mysql_fetch_array($checklogin);
$roleid = $row['roleid'];
$_SESSION['Email'] = $email;
$_SESSION['LoggedIn'] = 1;
$_SESSION['Access'] = $roleid;
echo "<h1>Success</h1>";
echo "<p>We are now redirecting you to the member area.</p>";
echo "<meta http-equiv='refresh' content='2;index.php' />";
}
else {
echo "<h1>Error</h1>";
echo "<p>Sorry, your account could not be …Run Code Online (Sandbox Code Playgroud) 我不确定为什么会话中没有返回变量用户名.当用户登录时,我启动会话:
$username = trim($_POST['username']);
if(!isset($_SESSION)){ session_start(); }
$_SESSION[$this->GetLoginSessionVar()] = $username;
Run Code Online (Sandbox Code Playgroud)
在用户的欢迎页面上,当我运行echo命令时,我看到正在返回的正确变量.但我不确定为什么return语句不起作用.我的PHP文件中有以下内容:
function UserName()
{
return isset($_SESSION['name_of_user']) ? $_SESSION['name_of_user'] : "Unknown User" ;
//echo $_SESSION['name_of_user'];
}
Run Code Online (Sandbox Code Playgroud)
在我的HTML中,我有:
Welcome back <?PHP $fgmembersite->UserName(); ?>!
Run Code Online (Sandbox Code Playgroud)
我还检查了会话ID,它也正在生成.你能帮我理解我做错了什么吗?
我为受密码保护的页面制作了用户身份验证脚本.
在我的脚本的第一个版本中,我首先检查用户名和密码是否与数据库中的用户名和密码匹配,如果是,请设置$ _SESSION ['user_connected']变量以及$ _COOKIE ['user_connected']变量真正.我的index.php文件是通过验证是否设置了$ _COOKIE ['user_connected']来启动的,然后绕过数据库检查是否为true.
然后我意识到用户可以访问cookie,有人可以在访问网站之前将$ _COOKIE ['user_connected']设置为TRUE,然后就会出现混乱.但是$ _SESSION变量怎么样?如果用户已连接,我可以安全地使用它们来检查整个网站吗?
tl; dr:用户可以修改$ _SESSION变量吗?
我正在使用 CURL 从外部 url 下载一个大文件并将其保存在我的服务器上。这可能需要几分钟的时间。下载运行时,我使用curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,.. 运行匿名函数,该函数定期使用当前下载信息更新我的 $_SESSION['download_progress'] 变量。
现在,所有这些都发生在 upload.php 文件中,当用户等待文件下载时,我使用 javascript 请求 Progress.php 页面,其中包含以下简单代码:
session_start();
echo $_SESSION['download_progress'];
Run Code Online (Sandbox Code Playgroud)
这允许我的 JavaScript 代码显示有关下载进度的信息。
除非它不起作用。
在“upload.php”完成加载之前,“progress.php”页面不会加载(换句话说,两个页面仅在文件下载完成后才加载),这不好。session_start() 以某种方式阻止“progress.php”页面加载。我使用自己的服务器(apache + php 5.4),所以我拥有所有管理权限。
我怎么解决这个问题?我可以使用一些丑陋的解决方法,例如将下载信息写入文本文件而不是会话变量,然后使用 javascript 直接读取该文本文件,但我宁愿不这样做。
谢谢
我是Node.js的新手,我想知道除了session()之外,我是否可以使用"存储"来存储当前请求的变量?
我有一个基于Authorization标头的API,以及一个存储在Redis中的有效标记池.
因此,我没有会议,也不想.
但是我希望在此请求期间存储变量以供进一步使用.例如,我想存储与Redis中找到的令牌相对应的user_id,以便我可以在任何我想要的地方使用它.
如果我这样做:
app = express();
app.user_id = 1;
没关系,或者我的user_id会变成全局应用程序处理的所有请求吗?(简而言之:是为服务器处理的每个请求实例化的app,还是持久的?)
如果这不行,我怎么能在没有会话的情况下实现这样的目标呢?
感谢您的任何帮助 :)
是否有可能在Slim v3中使用PHP会话?如果没有,什么是好的替代品?如果我可以使用它们,我应该将index_start()放在index.php或文件中我使用$ _SESSION变量?
谢谢你:D
Mac 和 Windows 上最新的 Firefox 63.0 版本以某种方式破坏了我为电子商务网站的管理后端构建的登录。这以前工作得很好。我使用 PHP。
使用有效凭据成功登录后,$_SESSION['admin_logged_in']变量将被设置为TRUE,并且我已正确登录并重定向到起始页面。然而,当我尝试导航到管理站点中的任何其他页面时,我会立即注销,就好像会话变量突然丢失一样。
在最开始的每个页面(包括起始页面)上,我都包含一个简短的登录检查脚本,如下所示:
<?php
//start session
session_start() ;
//check user is logged in
if (($_SESSION['admin_logged_in'] !== TRUE) || (!isset($_SESSION['admin_logged_in']))) {
header("location: /index.php") ;
$_SESSION['admin_reason'] = "illegal" ;
exit;
}
?>
Run Code Online (Sandbox Code Playgroud)
我可能认为这是 Firefox 的一个错误,但最近我也被 iOS 12 和 MacOS Mojave 上最新版本的 Safari 注销了,通常是在浏览几个页面后。
目前在 Opera 或 Chrome 上工作且没有问题(在 Mac 上测试)。
我尝试过清除 Firefox 中的缓存并调整隐私设置,但没有成功。我已经与我的网络主机交谈过,他们不知道任何服务器端问题或更改。
但是,如果 PHP 代码和会话变量存在问题,因为这是在服务器端处理的,那么它可能无法在任何浏览器上运行,并且以前也无法运行?
感谢您的任何建议。
我设法解决了这个问题,请参阅下面的答案。
我正在尝试将(Javascript IBM Notes)数据库对象存储在变量onPageLoad中,以便稍后在代码中进行访问。我尝试设置viewScope和sessionScope变量,但是它们似乎总是返回null。
onPageLoad:
var db_rooms: NotesDatabase = session.getDatabase(session.createName(doc_ProfileConfig.getItemValueString("ServerNA")).getCommon(), doc_ProfileConfig.getItemValueString("FilePathTX"));
viewScope.put("ResroomDb", db_rooms);
Run Code Online (Sandbox Code Playgroud)
我使用db_rooms来获取onPageLoad数据,因此我知道它是有效的数据库对象。
现在稍后,当我尝试再次获取数据库时:
var db:NotesDatabase = viewScope.get("ResroomDb");
Run Code Online (Sandbox Code Playgroud)
这样做会导致无法加载(状态500)。
我同时尝试了Session和ViewScope,是否可能将数据库对象存储在Application范围内/一个好主意,因为它只有一个页面应用程序?
我的javascript代码看起来像它应该的那样工作.但是,当我在Chrome中查看"来源"时,它不同意实际执行的javascript.
这是我的代码:
<?php
$_SESSION['new'] = "blue";
if (!isset($_SESSION['old'])) { $_SESSION['old'] = "blue"; }
echo '<script type="text/javascript">
$(document).ready(function() {
changeCol("'.$_SESSION["old"].'","'.$_SESSION["new"].'");
});
</script>';
$_SESSION['old'] = "blue";
?>
Run Code Online (Sandbox Code Playgroud)
$_SESSION['old']="green"来自上一页.代码应该调用changeCol("green","blue"),然后设置$_SESSION['old']="blue".
事实上,这两件事都发生了,所以我的代码就像它的设计一样工作,但如果我查看源代码,它会说changeCol("blue","blue").这很奇怪,因为如果在changeCol()中我将传递的变量写入console.log,我得到green, blue.
所以如果它在调用changeCol(green,blue)为什么它changeCol(blue,blue)在我查看源代码时会说?
我在menu.php中使用两个网页我无法获得会话变量的详细信息,它将显示未定义的索引.
$info = mysql_fetch_array( $data );
session_start();
// store session data
$type="$info[TYPE]";
$no="$info[NO]";
$_SESSION['type']=$type;
$_SESSION['no']=$no;
echo "Pageviews=". $_SESSION['type'];
echo "Pageviews=". $_SESSION['no'];
header('Location:menu.php');
Run Code Online (Sandbox Code Playgroud)
<?php sesstion_start();
echo "Pageviews=". $_SESSION['type'];
echo "Pageviews=". $_SESSION['no'];
?>
Run Code Online (Sandbox Code Playgroud)