我的网站的安全检查显示会话(即登录)永远不会过期。我已经测试了自己,发现了同样的情况 - 今天早上我在本地主机上打开了该网站,但我仍然从昨天开始登录。我一直认为它会在 20 分钟后过期,就像在 .NET Framework 应用程序中一样。
我使用 ASP.NET Core Identity 脚手架,除了实现两因素身份验证之外,只需进行很少的更改。
在我的 Startup.cs 中,我有以下代码来添加会话支持:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.Expiration = TimeSpan.FromSeconds(10);
});
Run Code Online (Sandbox Code Playgroud)
我在 IdentityOptions 下看不到任何与登录超时相关的代码。
在登录页面上,我专门将任何“记住我”类型的函数硬编码为 false:
await _signInManager.SignInWithClaimsAsync(user, isPersistent: false, claims);
如何让我的登录会话在大约 20 分钟后过期,就像在 .NET Framework 中自动过期一样?
我基本上遇到了与此问题中提到的问题完全相反的问题: asp.net-core2.0 user auto logoff after 20-30 min
这里的大多数问题似乎都在询问如何增加超时,但我需要将其从(看似)无限减少到 20 分钟左右:
我正在尝试使用grep过滤webserver日志文件.我需要输出包含65.55的所有行. 但排除那些包含msnbot的匹配行.
我的出发点是 - 但它不起作用:
grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt
Run Code Online (Sandbox Code Playgroud)
我正在使用grep for Windows(因此是双引号),但我怀疑这很重要.
我接管了一个旧的软件项目,该项目使用MS Access数据库来存储其数据.但是,数据库不会在Access中打开,因为它说:
"您没有必要的权限来使用'database.mdb'对象.让您的系统管理员或创建此对象的人为您建立适当的权限."
但我不知道如何做到这一点,谷歌搜索显示几乎没有(似乎限制访问Access数据库,这不是经常做的事情!).我得到的唯一其他线索是在同一个文件夹中有一个.MDW(工作组)文件,但我不知道这是否(或如何)与主数据库有关,因为它有不同的文件名,也没有打开.
如何访问此数据库?是否可能受密码保护或只是某种权限问题?
如何验证.NET中HTTPS/SSL证书的有效性?
理想情况下,我想建立一个到网站的HTTPS连接,然后找出是否以有效的方式完成(证书未过期,主机名匹配,证书链信任等),但内置HTTP客户端似乎忽略证书错误(而且我不确定是否需要物理下载网页来验证证书?).
我试过使用下面的代码(改编自评论中的答案),但ValidationCallback永远不会被调用:
static void Main(string[] args)
{
String url = "https://www.example.com";
HttpWebRequest request = WebRequest.CreateHttp(url);
request.GetResponse();
request.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
Console.WriteLine("End");
Console.ReadKey();
}
private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
Console.WriteLine("Certificate OK");
return true;
}
else
{
Console.WriteLine("Certificate ERROR");
return false;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在给定域(例如 www.example.com)的虚拟主机证书存储中查找最新证书
找到任意数量的匹配证书很容易,但是我如何才能找到按到期日期(最远的未来)排序的最新证书?
我现有的代码是:
(Get-ChildItem -Path cert:\LocalMachine\WebHosting
| Where-Object {$_.Subject -match "example.com"}).Thumbprint;
Run Code Online (Sandbox Code Playgroud)
然而,这有时会返回两个证书,因为通常之前的证书(在续订之前)必须在证书存储中保留一小段时间。
如何在 .NET Core 3.1 中的 Controller 构造函数中访问 HttpContext?
它在构造函数中似乎总是为 null,但在实际方法中可用。这在 MVC 4 中是可能的,并且在尝试将项目移植到 .NET Core 时出现了。
如果我尝试通过 DI 使用 HttpContextAccessor,则会失败并出现异常:
InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Http.HttpContextAccessor' while attempting to activate 'MyProject.Controllers.UsersController'
我想在我的应用程序中使用小写 URL,并且我可以看到此处记录了一个 RouteOptions 对象:
但实际如何使用RouteOptions 呢?
我认为它会类似于下面的内容,但它只是生成一个编译器警告,指出 app.UseRouting() 不带任何参数:
app.UseRouting(options => {
options.<no intellisense>
});
Run Code Online (Sandbox Code Playgroud)
那么有人可以告诉我在哪里可以指定 RouteOptions 吗?
为什么 SQL Server (2005) 会误解这个 ISO 8601 格式的日期?(YYYY-MM-DD)
DECLARE @FromDate DATETIME
SET @FromDate = '2013-01-05'
PRINT @FromDate
-- Prints: May 1 2013 12:00AM
Run Code Online (Sandbox Code Playgroud)
文本格式的日期显然是 1 月 5 日,但出于某种原因,SQL Server 将其解释为 5 月 1 日。世界上没有 YYYY-DD-MM 的日期格式,为什么会发生这种情况?我多年来一直使用这种格式,以前从未遇到过问题,所以我不确定在这种情况下有什么不同。
即使我使用 CONVERT 将其强制转换为 ISO8601,它仍然会出错:
DECLARE @FromDate DATETIME
SET @FromDate = CONVERT(VARCHAR, '2013-01-05', 126)
PRINT @FromDate
-- Still prints: May 1 2013 12:00AM
Run Code Online (Sandbox Code Playgroud)
编辑:哎呀 - 我正在使用 'CONVERT(VARCHAR 以上我真正的意思是 CONVERT(DATETIME),所以这就是为什么没有任何效果。谢谢@RBarryYoung
但是,如果我在不同的服务器(SQL 2012)上运行上述两个示例中的任何一个,它们都会正确打印“Jan 5 2013 12:00AM”
这里发生了什么事?我认为在 SQL Server 中使用 ISO 格式的主要原因之一是它使月份和日期明确无误?
我迫切需要在ASP.NET中镜像Session集合的行为(就检索项目时的行为而言).我已经花了很长时间在这上面,但迄今为止无处可去.
会话就像一个字典,但是如果你访问一个Session并且该值不存在,那么你得到的null不是抛出异常.这就是我需要复制的全部内容.
我尝试重写索引器以添加空检查,但它会引发堆栈溢出异常:
public class CriteriaCollection : Dictionary<string, object>
{
private object GetData(string key)
{
object value = null;
if (this.ContainsKey(key))
{
value = this[key];
}
return value;
}
private void SetData(string key, object value)
{
this[key] = value;
}
public new object this[string key]
{
get { return GetData(key); }
set { SetData(key, value); }
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个工作控制台应用程序,它将数据发送到 API。然而,一旦我启动 fiddler,我就会收到消息:
[Fiddler] ReadResponse() 失败:服务器未返回此请求的完整响应。服务器返回 257 字节。
Fiddler 中显示的第一个标头是:HTTP/1.1 504 Fiddler - Receive Failure
它似乎是由 fiddler 直接生成的,而不是来自我的 API 服务器(.NET)。
鉴于 fiddler 不会向我显示服务器的原始结果,我如何调试为什么会发生这种情况?我认为存在某种 HTTP 标头错误,该错误与我的控制台应用程序兼容,但与 Fiddler 不兼容。
我一直在处理 gzip 压缩请求,因此也许其中一个标头不正确(内容长度),但由于无法查看原始响应,因此很难调试此问题。