我有一个Express 4应用程序设置来进行会话.
// Sessions
app.use(cookieParser());
app.use(session({ secret: "some-secret" }));
// Signup
app.post("/signup", function (req, res) {
create_user(req.body.user, function (err, user_id) {
req.session.user_id = user_id;
res.redirect("/admin");
});
});
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,它会将user_id保存到req.session.但是,当我重新启动服务器时,会话消失了.
为什么不坚持?我错过了一些配置吗?
据这里的文章https://php.watch/articles/PHP-Samesite-cookies和PHP documenation在https://www.php.net/manual/en/session.security.ini.php,只有2 PHP 7.3 中添加的此新功能的可能配置选项:
然而,根据 Chrome 控制台,这需要设置为“无”:
与 URL 上的跨站点资源关联的 cookie 设置为没有该
SameSite属性。它已被阻止,因为 Chrome 现在仅在设置了SameSite=None和 的情况下才提供具有跨站点请求的 cookieSecure。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在 URL 和 URL 中查看更多详细信息。
因此,我无法再设置跨站点 cookie。解决方法是什么?
我读到关于这个论点许多老问题,我认为最好的做法是设置了一个cookie username,user_id并随机令牌.
在创建cookie时,相同cookie的数据存储在DB中,当用户拥有cookie时,它们将被比较(cookie数据,DB数据).
如果这是真正的最佳实践,我真的无法理解安全逻辑在哪里.
窃取cookie的攻击者与原始用户具有相同的cookie:|
忘了一步?:P
我想根据OWIN cookie过期的时间创建一些倒数计时器.我正在使用OWIN和MVC 5,我从默认情况下开始了解SlidingExpiration.我不使用'session',因为我需要这个应用程序才能在Web场中生存(我不打算部署会话数据库).
我已登录了Banana.com.香蕉有api链接/app/ajax_loggedin.
我的网站是猴子.Monkey运行一个简单的GET json到banana's /app/ajax_loggedin,它返回一个登录值1或0.
为什么它通过ajax总是返回0,即使我真的登录Banana并且直接访问链接给我1.香蕉的开发人员怎么能修复它?
我会理解它,如果它是一个服务器端调用,但我不明白为什么它不会告诉我,如果我登录,如果香蕉提出请求.运行session_id()检查,它通过ajax每次调用生成一个新的,当直接访问它工作正常并保持不变.
有没有修复或其他方法来做到这一点?
目前我正在使用angulajs应用程序.
我想在cookie中存储一些值.所以我用angular-cookies-min脚本为cookie添加了一些值
我已使用以下代码将值保存到cookie.
$cookieStore.put("userInfo", userInfo);//userInfo is a array with some values.
Run Code Online (Sandbox Code Playgroud)
现在我要清除cookie?我该怎么做?
我需要弄清楚如何取消设置这个cookie.我到目前为止所尝试的一切都失败了.
这就是我目前正在取消它的方式,它似乎不起作用.
setcookie("user_id", $user_id, time() - 7200);
Run Code Online (Sandbox Code Playgroud)
这就是我设置它的方式:
setcookie("user_id", $user_id, time() + 7200);
Run Code Online (Sandbox Code Playgroud)
我调用set_session_from_cookie()了这个函数来检查是否设置了cookie,如果设置了cookie,它会使用cookie启动一个新会话.
问题是,当我在我的页面上使用它时,我无法注销.我认为这是因为我无法取消会话.
我有这个功能的原因是如果用户想要在结束会话后被记住,他们可以通过调用cookie重新启动会话.
function set_session_from_cookie()
{
if (isset($_SESSION['user_id'])) {
echo '';
} else {
$_SESSION['user_id']=$_COOKIE['user_id'];
}
}
Run Code Online (Sandbox Code Playgroud)
登出:
<?php
require'core.php';
session_destroy();
setcookie("user_id", "", time() - 7200);
header('Location:/social_learning/site_pages/starter-template.php');
Run Code Online (Sandbox Code Playgroud)
我用以下代码设置我的cookie:
if ($rememberme == "on") {
$user_id = mysql_result($query_run, 0, 'id');
setcookie("user_id", $user_id, time() + 7200);
$_SESSION['user_id'] = $user_id;
redirect('home_page.php');
} else {
if ($rememberme == "") {
echo 'ok';
$user_id = mysql_result($query_run, 0, 'id');
echo $user_id;
$_SESSION['user_id'] …Run Code Online (Sandbox Code Playgroud) 如何在不使用标头已发送警告的情况下重新打开PHP中的会话?
在设置了我想设置的所有会话变量之后,我使用session_write_close()关闭会话.我这样做,因为只要会话打开,同一个客户端可能只有一个活动连接.但我喜欢有多个并行的.
但是,如果我想稍后设置另一个会话变量,我需要再次使用session_start()重新打开会话.这是有效的,但是因为我已经将代码发送到客户端,所以它会打印"已发送的标题"-warnings.为什么要再次设置cookie?cookie已经设置好了.我唯一需要的是获得再次在服务器上写入会话文件的权限.
好吧,我可以抑制它们.但有没有办法重新打开会话,已经使用session_write_close关闭而不重新发送Cookie标头?Cookie头已由第一个session_start()正确发送.所以第二个只需要给我回访写入存储在Web服务器上的会话文件.
<?php
session_start();
// setting all the session vars I like to set
session_write_close(); // <-- // To allow parallel requests by the same user, while this script is still running
// Code that takes some time to execute
// It also prints output, so no more cookie headers after this point
@session_start(); // <-- works, but I like to use it without suppressing warnings
$_SESSION['key'] = 'new value I like to store'; …Run Code Online (Sandbox Code Playgroud) 我见过的所有邮递员cookie管理答案都指的是浏览器扩展(打开chrome,删除cookies即拦截器等)或应用程序,使用UI手动管理cookie.
我想删除我的预请求代码中的某些cookie,作为编写API测试脚本的一部分.(以编程方式删除它们)
Sandobx API文档提到 pm.cookies我尝试过
if (pm.cookies !== null) {
console.log("cookies!");
console.log(pm.cookies);
}
Run Code Online (Sandbox Code Playgroud)
但pm.cookies阵列是空的.然而在控制台中,GET调用然后传递cookie.
还有postman.getResponseCookies,这是null(我假设因为我们在预请求部分,而不是在测试部分)
一个答案建议调用postman-echo服务来删除cookie.我还没有对此进行调查,但感觉不对.
几周前,我们有一位客户联系我们说,有时当他创建活动时,它会以别人的名字创建!
我们做了一些故障排除,找不到任何东西.我们要求用户在下次遇到这些问题时与我们联系.他确实与我们联系,我们能够与他进行一次讨论,并亲眼看到问题.
这不仅仅是活动,他被认为是应用程序中的其他人.他可以访问其他人应该访问的所有内容.就在那时我们意识到我们正在讨论会话混淆问题.
关于我们的代码:
与任何其他应用程序一样,我们有一个简单的登录页面,用户输入电子邮件和密码,我们根据数据库对它们进行身份验证,如果它们有效,我们调用FormsAuthentication.SetAuthCookie()将当前用户ID保存在cookie中我们让他进来
BL.User currentUser = BL.User.Authenticate(txtUsername.Text, txtPassword.Text);
if (currentUser != null)
{
this.Session["NumberOfLoginTried"] = "0";
FormsAuthentication.SetAuthCookie(currentUser.UserID.ToString(), chRememberMe.Checked);
Response.Redirect(FormsAuthentication.GetRedirectUrl(currentUser.UserID.ToString(), false));
}
Run Code Online (Sandbox Code Playgroud)
我们还使用以下代码在我们的应用程序中获取登录用户ID(当前用户).
public static int GetCurrentUserID()
{
int userID = -1;
int.TryParse(HttpContext.Current.User.Identity.Name, out userID);
return userID;
}
Run Code Online (Sandbox Code Playgroud)
是的,我们做了我们的家庭作业,并搜索了以下两个链接:
http://lionsden.co.il/codeden/?p=446
使用StateServer的ASP.NET会话混合(SCARY!)
我们已禁用.aspx和.ascx文件的内核模式缓存和用户模式缓存,但这仍然存在.
PS-该应用程序在带有IIS 7.5的Windows 2008 R2上运行.我们不使用cookieless会话.