搜索了很多后我没有得到任何答案,最后我不得不回复你.下面我详细解释我的问题.这太长了,所以请不要放弃阅读.我用简单的语言解释了我的问题.
我一直在开发一个asp.net mvc项目.我正在使用标准的ASP.NET角色和成员资格.一切都很好,但记住我的功能根本不起作用.我列出了所有工作细节.希望你们能帮助我解决这个问题.
我只需要这个:
我需要用户登录Web应用程序.在登录期间,他们可以记住我或没有它登录.如果用户登录时记得我,我希望浏览器长时间记住它们,让我们说至少一年或相当长的时间.他们在www.dotnetspider.com,www.codeproject.com,www.daniweb.com和许多其他网站上的方式.如果用户登录时不记得我,那么浏览器应允许访问网站大约20-30分钟,之后他们的会话将过期.当用户登录并关闭浏览器而不注销时,他们的会话也应该到期.
注意:我已经成功实现了上述功能,而不使用标准的asp.net角色和成员资格,为用户创建自己的talbes并对我的数据库表进行身份验证,在我的其他项目中设置cookie和会话.但对于这个项目,我们从一开始就使用标准的asp.net角色和成员资格.我们认为它会起作用,在测试之后所有内容都构建完毕后它才起作用.现在我们不能用我自己的自定义用户表和所有东西替换标准asp.net角色和成员资格的现有功能,你明白我在说什么.
有标准的asp.net角色和成员资格功能存在某种错误,或者我有标准asp.net角色和成员身份错误的整个概念.我已经说明了我想要的东西.我认为这很简单合理.
我做了什么
在我的控制器动作中,我有这个:
FormsAuth.SignIn(userName,rememberMe);
public void SignIn(string userName,bool createPersistentCookie){FormsAuthentication.SetAuthCookie(userName,createPersistentCookie); }
现在问题如下:
我已经在上面的章节中说过"我只需要这个".用户可以成功登录系统.它们的会话存在的时间与web.config中超时值中指定的分钟数相同.我还给了我的web.config示例.在我的samplem中如果我将超时设置为5分钟,则用户会话在5分钟后到期,这没关系.但是如果用户关闭浏览器并重新打开浏览器,用户仍然可以在没有登录的情况下进入网站,直到"超时"中指定的时间还没有消失.超时值的滑动到期也正常.现在,如果用户在记住我的情况下登录系统,则用户会话在5分钟后仍会过期.这不是好行为,是吗?我的意思是说,如果用户登录系统并记住我检查了他应该记住很长时间,直到他没有退出系统,或者用户不会手动删除浏览器中的所有cookie.如果用户登录系统而不记得我检查过他的会话应该在web.config中指定的超时时间段之后到期,以及用户是否关闭浏览器.问题是如果用户关闭浏览器并重新打开它,他仍然可以在不登录的情况下进入网站.
我在这个主题上搜索了很多网,但我无法得到解决方案.在Scott Gu撰写的关于完全相同主题的博客文章(http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx)中.用户在评论中抱怨同样的事情,斯科特先生没有给出简单的解决方案.
我在以下地方阅读:http : //weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191. ASPX
我想这是很多用户的问题.正如Scott Gu先生所做的博客文章所示.
非常感谢您的帮助.提前致谢.
我一直在使用ASP.NET Identity 2.2.1.以下是VerifyCode操作的post方法中的代码.
var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser);
switch (result)
{
case SignInStatus.Success:
return RedirectToAction("Dashboard","Index");
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid code.");
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
当model.RememberMe和model.RememberBrowser都为true时,浏览器会记住Identity和两个因子cookie 2周.这是默认实现.
但我只需要记住TFA 8小时.我怎样才能做到这一点?
自从过去10天以来,我一直在寻找解决方案,但我还没有找到解决方案.任何帮助将非常感激.
以下是我的StartUp类中的代码.它只是没有生效.
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc remember-me two-factor-authentication asp.net-identity-2
我使用CodeProject的开源代码来读取来自邮件服务器(POP Server)的电子邮件.代码可以在以下位置找到:http://www.codeproject.com/KB/IP/Pop3MimeClient.aspx
到目前为止它工作正常; 我可以看电子邮件.
我使用此代码的目的是从POP服务器检索电子邮件并处理它们.
我的问题是:如果我使用Gmail的pop服务器"pop.gmail.com"并运行appplication,我只会收到自上次运行应用程序以来我没有检索过的那些电子邮件.但是,如果每次运行应用程序时都使用客户端的POP服务器,我会在pop服务器中收到所有电子邮件.
例如:
如果我使用Gmail POP服务器:pop.gmail.com
我在pop服务器上有三封电子邮件.我没有运行该应用程序.我是第一次运行该应用程序.申请阅读电子邮件; 这次我将收到所有三封电子邮件.我第二次运行应用程序; 我的申请这次不会阅读任何电子邮件,因为我已经阅读了3个现有的电子邮件.这可以; 这就是我要的.
现在我发送一封电子邮件给pop.gmail.com.我第三次再次运行该应用程序; 这次我只会收到刚刚到达的电子邮件,这是第四个.这是好行为; 这就是我要的.
但是,如果我使用客户端的POP服务器:
无论我运行多少次应用程序,它都会读取邮箱中的所有电子邮件.
这会给我带来麻烦,因为我正在考虑构建一个窗口服务,它将从pop服务器读取电子邮件并处理它们.该服务将持续运行.我将在POP服务器中处理电子邮件然后睡觉,比如让我们说1分钟,然后再次处理电子邮件.如果从CodeProject下载的应用程序一直读取所有电子邮件,我的客户邮箱在这个邮箱中可能有数千个电子邮件,所以这对我来说是不可行的.
是否有一些设置要在我的客户端的POP服务器上进行,这将允许我的应用程序仅检索自上次运行服务以来我没有读过的那些电子邮件?
我在asp.net MVC网站上使用模型验证.我希望有一个功能来阻止用户在testbox中输入空格并提交表单.
还有其他验证属性可用,但我找不到任何验证属性,阻止用户只输入输入文本框中的空格.
我可以为此开发一个自定义属性,但还有另一个叫做正则表达式验证器的方法,我认为我可以轻松地使用它来实现这个功能.例如:我们可以设置一个具有正则表达式的属性来验证电子邮件.如果用户输入错误的电子邮件,则会立即显示电子邮件格式错误的消息.
我想使用相同的,但我不知道如果用户只输入空格,验证表单输入字段的常规表达式.
请帮我这种正则表达式?谢谢,
我有一个像下面这样的方法
public List<aspnet_Roles> GetAllRoles()
{
var rolesList = _dbProfile.aspnet_Roles.ToList();
return rolesList;
}
Run Code Online (Sandbox Code Playgroud)
在此方法中,首先检索数据库(LINQ to SQL)中的所有角色并将其分配给rolesList类型的变量var.
我想知道返回值是否更好,而不是先将其分配给其他变量然后返回它.
以下方法是否优于上述版本:
public List<aspnet_Roles> GetAllRoles()
{
return _dbProfile.aspnet_Roles.ToList();
}
Run Code Online (Sandbox Code Playgroud)
请问上述两种方法在IL中编译为相同或第二版更好吗?第二个版本没有不必要的变量声明.
我们需要开发一个可以从桌面浏览器浏览的网站.我们还需要为同一个网站开发一个Android应用程序.我们正在考虑使用C#,Microsoft SQL Server和Windows Communication Foundation,Linq To Entity with Repository Framework来使用ASP.NET MVC.
WCF将使用Repository Framework使用Linq to Entity访问数据库并返回JSON.
问题1 Android应用程序将调用WCF服务.我们的想法是否正确?
问题2 ASP.NET MVC网站将调用WCF服务.使ASP.NET MVC应用程序调用WCF服务更好或者ASP.NET应用程序直接与数据库通信而不在中间使用WCF更好?
我的想法是仅将WCF用于Android应用程序,并使用linq到实体框架直接与数据库进行交互,使用中间没有WCF的存储库模式.这会是一个好方法吗?
问题3 如果ASP.NET MVC网站将调用WCF服务,我在哪里需要实现DI.我认为它必须在存储库框架和WCF服务之间,并且DI将在ASP.NET MVC和WCF之间无关.对?
这可能是一个简单的问题,但我想知道其他人如果有相同的要求,他们是如何做的.喜欢网站和Android应用程序.我不熟悉DI以及如何使用它.我一直在阅读关于DI的内容并没有得到它.所以我想知道DI会存在哪里?