学用MVC4做网站一:用户登陆1.2

news/2024/5/10 0:13:00/文章来源:https://blog.csdn.net/dearbaba_8520/article/details/82013043
原文地址为: 学用MVC4做网站一:用户登陆1.2

用户

1.1用户注册

1.2用户登陆

首先在Models里添加用户登陆模型类UserLogin,该类只要用用户名,密码和验证码三个字段。

/// <summary>
/// 用户登陆模型
/// </summary>
public class UserLogin
{
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "用户名", Description = "4-20个字符。")]
[Required(ErrorMessage
= "×")]
[StringLength(
20, MinimumLength = 4, ErrorMessage = "×")]
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
[Display(Name = "密码", Description = "6-20个字符。")]
[Required(ErrorMessage
= "×")]
[StringLength(
20, MinimumLength = 6, ErrorMessage = "×")]
[DataType(DataType.Password)]
public string Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
[Display(Name = "验证码", Description = "请输入图片中的验证码。")]
[Required(ErrorMessage
= "×")]
[StringLength(
6, MinimumLength = 6, ErrorMessage = "×")]
public string VerificationCode { get; set; }

}

在UserController里添加Login action; 代码看如下:

public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(UserLogin login)
{
return View();
}

使用Cookie保存登陆账号,密码等信息,修改public ActionResult Login(UserLogin login)。修改完成代码如下:

[HttpPost]
public ActionResult Login(UserLogin login)
{
//验证验证码
if (Session["VerificationCode"] == null || Session["VerificationCode"].ToString() == "")
{
Error _e
= new Error { Title = "验证码不存在", Details = "在用户注册时,服务器端的验证码为空,或向服务器提交的验证码为空", Cause = "<li>你注册时在注册页面停留的时间过久页已经超时</li><li>您绕开客户端验证向服务器提交数据</li>", Solution = "返回<a href='" + Url.Action("Register", "User") + "'>注册</a>页面,刷新后重新注册" };
return RedirectToAction("Error", "Prompt", _e);
}
else if (Session["VerificationCode"].ToString() != login.VerificationCode.ToUpper())
{
ModelState.AddModelError(
"VerificationCode", "×");
return View();
}
//验证账号密码
userRsy = new UserRepository();
if (userRsy.Authentication(login.UserName, Common.Text.Sha256(login.Password)) == 0)
{
HttpCookie _cookie
= new HttpCookie("User");
_cookie.Values.Add(
"UserName", login.UserName);
_cookie.Values.Add(
"Password", Common.Text.Sha256(login.Password));
Response.Cookies.Add(_cookie);
return RedirectToAction("Default","User");
}
else
{
ModelState.AddModelError(
"Message", "登陆失败!");
return View();
}

}

public ActionResult Login() 上右键添加强类型视图

image

完成后代的Login.cshtml

@model CMS.Models.UserLogin

@{
ViewBag.Title
= "用户登陆";
Layout
= "~/Views/Shared/_Layout.cshtml";
}

<div class="banner">
    <img src="~/Skins/Default/Images/banner.jpg" />
</div>


@using (Html.BeginForm())
{
    @Html.ValidationSummary(
true)

   
<div class="form">
        <dl>
            <dt>用户登陆</dt>
            <dd>
                <div class="label">@Html.LabelFor(model => model.UserName):</div>
                <div class="ctrl">@Html.EditorFor(model => model.UserName)
                    @Html.ValidationMessageFor(model
=> model.UserName)
                    @Html.DisplayDescriptionFor(model
=> model.UserName)
               
</div>
            </dd>
            <dd>
                <div class="label">@Html.LabelFor(model => model.Password):</div>
                <div class="ctrl">@Html.PasswordFor(model => model.Password)
                    @Html.ValidationMessageFor(model
=> model.Password)
                    @Html.DisplayDescriptionFor(model
=> model.Password)
               
</div>
            </dd>
            <dd>
                <div class="label">验证码:</div>
                <div class="ctrl">
                    @Html.TextBoxFor(model
=> model.VerificationCode)
                    @Html.ValidationMessageFor(model
=> model.VerificationCode)
                   
<img id="verificationcode" alt="" src="@Url.Action("VerificationCode", "User")" />
                    <a id="trydifferent" style="cursor: pointer">换一张</a>
                </div>
            </dd>
            <dd>
                <div class="label"></div>
                <div class="ctrl">
                    <input type="submit" value="登陆" />@Html.ValidationMessage("Message");
               
</div>
            </dd>
        </dl>
        <div class="clear"></div>
    </div>
}

<script type="text/javascript">
    $(
"#trydifferent").click(function () {
        $(
"#verificationcode").attr("src", "/User/VerificationCode?" + new Date());
    })

</script>
@section Scripts {
    @Scripts.Render(
"~/bundles/jqueryval")
}

浏览器中查看一下登陆页面

用户登陆 -

点下登陆测试一下。OK登陆成功

验证用户是否已经登陆,这块和权限验证一起从AuthorizeAttribute继承个自定义验证类

在项目里添加Extensions文件夹,添加一个类UserAuthorizeAttribute 继承自AuthorizeAttribute,重写AuthorizeCore方法用来实现用户是否已经登陆的验证,权限验证在写权限功能时在补充

using Ninesky.Repository;

namespace System.Web.Mvc
{
/// <summary>
/// 用户权限验证
/// </summary>
public class UserAuthorizeAttribute :AuthorizeAttribute
{
/// <summary>
/// 核心【验证用户是否登陆】
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//检查Cookies["User"]是否存在
if (httpContext.Request.Cookies["User"] == null) return false;
//验证用户名密码是否正确
HttpCookie _cookie = httpContext.Request.Cookies["User"];
string _userName = _cookie["UserName"];
string _password = _cookie["Password"];
httpContext.Response.Write(
"用户名:"+_userName);
if (_userName == "" || _password == "") return false;
UserRepository _userRsy
= new UserRepository();
if (_userRsy.Authentication(_userName, _password) == 0) return true;
else return false;
}
}
}

以后只要在需要登陆后才能操作的Action或Controller上加[UserAuthorize]就可实现验证是否已经登录了。

退出功能,在UserController添加Logout Action

/// <summary>
/// 退出系统
/// </summary>
/// <returns></returns>
public ActionResult Logout()
{
if (Request.Cookies["User"] != null)
{
HttpCookie _cookie
= Request.Cookies["User"];
_cookie.Expires
= DateTime.Now.AddHours(-1);
Response.Cookies.Add(_cookie);
}
Notice _n
= new Notice { Title = "成功退出", Details = "您已经成功退出!", DwellTime = 5, NavigationName="网站首页", NavigationUrl = Url.Action("Index", "Home") };
return RedirectToAction("Notice", "Prompt", _n);
}

转载请注明本文地址: 学用MVC4做网站一:用户登陆1.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_764051.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升你网站水平的 jQuery 插件推荐

原文地址为&#xff1a; 提升你网站水平的 jQuery 插件推荐jQuery是一个优秀JavaScript库&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画和Ajax交互。 jQuery的确改变了很多人写JavaScript的方式。如今&#xff0c;有很多现成的jQuery插件可供选择&…

使用C#实现网站用户登录

原文地址为&#xff1a; 使用C#实现网站用户登录我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉&#xff1f;要实现用户的登录&#xff0c;那么首先就必须要了解一般网站中是怎么判断用户是否登录的…

轻量服务器如何退款_wordpress程序搭建网站教程,新手小白如何搭建个人博客?...

导读&#xff1a;最近很多同学在问wordpress搭建教程因为很多的人都不会操作&#xff0c;只有学习过老课程的同学才知道&#xff0c;那么我就出一个详细的教程。(文/王听风)一.购买服务器这里我就以阿里云为列子&#xff1a;1.打开网址(https://www.aliyun.com/product/ecs)云服…

python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天&#xff0c;扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧&#xff0c;希望给参加Python培训的同学一点儿帮助。1、对__if__name__main的理解陈述 __name__是当前模块名&#xff0c;当模块被…

火狐(Firefox)如何移除add security exception添加的网站

如图&#xff0c;我浏览某些网站时弹出来如下框&#xff0c;为了浏览网页&#xff0c;我点了add exception—confirm security exception。现在我想移除&#xff0c;该如何操作&#xff1f; About Me ..................................................................…

web应用程序和web网站_使用推荐引擎个性化您的Web应用程序

web应用程序和web网站为了在快速发展的全球行业中保持相关性&#xff0c;技术专业人员必须跟踪IT的重大趋势&#xff0c;并找到方法将重要的趋势纳入其公司的技术产品组合中。 这样的趋势之一就是使用推荐引擎来驱动用户探索您的网站或企业的其他产品。 这些引擎根据各种模式向…

推荐16个国外的源码下载网站

本文转载自&#xff1a; https://www.cnblogs.com/lhb25/archive/2011/04/20/2013129.html 作者&#xff1a;lhb25 转载请注明该声明。如今&#xff0c;网上有很多的源代码下载网站&#xff0c;分析和学习别人的代码也是提高自己编程能力的方法之一。今天本文向大家推荐16个国…

网站建设过程中的:重要页面、关键页面、过程页面、结果页面

网站的页面类型和等级可做归类。 有些是“重要页面”&#xff0c;有些是“关键页面”&#xff0c;有些是“过程页面”&#xff0c;有些是“结果页面”。 这些根据页面存在的目的和作用分门别类。 “重要页面”和“关键页面”等级高于“过程页面”和“结果页面” 用户行为分析这…

大型网站服务器架构

QQ游戏于前几日终于突破了百万人同时在线的关口&#xff0c;向着更为远大的目标迈进&#xff0c;这让其它众多传统的棋牌休闲游戏平台黯然失色&#xff0c;相比之下&#xff0c;联众似乎已经根本不是QQ的对手&#xff0c;因为QQ除了这100万的游戏在线人数外&#xff0c;它还拥有…

大型网站系统架构分析

千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理&#xff1a;负载量不大的情况下selec…

(转)网站加速--动态应用篇 (上)

--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一, 引子二&#xff0c;总体结构图三&#xff0c;系统结构综述四&#xff0c;环境配置以及底层基础类库五, Memcache & Mysql 常用场景案例六&#xff0c;更多待续 ......-------------------…

宝塔如何备份网站_如何使用宝塔面板创建定时任务?

大家在使用宝塔面板时都可能会遇到需要使用定时任务的功能,在其进行操作网站程式时,例如文件备份、木马查杀&#xff0c;释放内存等都会用到定时任务&#xff0c;而用好定时任务功能可以使你工作效率事半功倍。而今天要教给大家的就是如何在SugarHosts云服务器上使用宝塔面板创…

网站 服务器 和 空间大小,网站服务器和空间大小

网站服务器和空间大小 内容精选换一换问题现象下载云主机文件到主机网盘&#xff0c;即下载文件到用户个人主机网盘时&#xff0c;提示下载失败错误。上传文件失败&#xff0c;提示/3.0/h5FileService/upload-403&#xff1a;服务错误&#xff0c;请稍后重试。从本地上传文件到…

寻找网页设计灵感的27个最佳网站推荐

今天&#xff0c;本文要向大家推荐的是27个寻找网页设计灵感的最佳网站。设计师们可通过这些网站收集的优秀网页设计作品来获取灵感&#xff0c;进而设计出更加时尚、更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xff0c;欢迎在评论中与大家分享。 CSS Nature Design…

linux创建ftp挂载硬盘,FTP架设 - 用Ubuntu Server架设基于独立硬盘的Windows文件共享和FTP服务器_服务器应用_Linux公社-Linux系统门户网站...

之前将storage文件夹(背后是挂载的整块新硬盘)通过samba服务与Windows共享。之所以先共享&#xff0c;是为了完成FTP后方便文件管理。软件&#xff1a;vsftpd目标&#xff1a;让用户登录FTP后可以上传文件(主要用于iPhone照片备份)&#xff0c;不同用户备份在各自的文件夹下。W…

搜java题的公众号_微信公众号seo排名|搜一搜排名优化提高,公众号排名技术,专业优化公众号排名,搜一搜排名...

引流的渠道多种多样&#xff0c;有最近很热门的视频、小程序、公众号起名、菜单布局等等&#xff0c;由于渠道太多咱们无法一一讲解清楚。今天这里就以公众号长尾词文章来给大家重点介绍一下如何抓住这一块流量&#xff1f;掌握好排名规律之后无论你做哪一个平台&#xff0c;都…

服务器快照能代替网站备份吗,云服务器的快照就是备份吗

云服务器的快照就是备份吗 内容精选换一换云服务器备份有配额限制&#xff0c;且受云硬盘备份的配额限制影响&#xff0c;云服务器备份会同时占用云硬盘备份的配额。当云硬盘备份的配额不足时&#xff0c;无法进行云服务器备份。在进行云服务器备份时&#xff0c;系统会自动调整…

Node.js 推荐20多个学习网站及图书

Node.js 推荐20多个学习网站及书籍Web 开发人员对 Node.js 日益增多&#xff0c;更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高&#xff0c;I/O密集型的业务。 介绍了很不错的书籍和案例&#xff0c;可以提高nodejs开发进度&#xff0c; Node.js Node 官…

网络爬虫爬取策略,注意爬虫爬取网站的频率

网络爬虫&#xff08;web crawler&#xff09;又称为网络蜘蛛&#xff08;web spider&#xff09;是一段计算机程序&#xff0c;它从互联网上按照一定的逻辑和算法抓取和下载互联网的网页,是搜索引擎的一个重要组成部分。一般的爬虫从一部分 start url开始&#xff0c;按照一定…

不修改代码就能优化ASP.NET网站性能的一些方法

阅读目录 开始配置OutputCache启用内容过期解决资源文件升级问题启用压缩删除无用的HttpModule其它优化选项本文将介绍一些方法用于优化ASP.NET网站性能&#xff0c;这些方法都是不需要修改程序代码的。 它们主要分为二个方面&#xff1a; 1. 利用ASP.NET自身的扩展性进行优化。…