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

news/2024/5/13 0:05:05/文章来源:https://blog.csdn.net/weixin_34296641/article/details/85523891

一用户

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);}

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

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

相关文章

一年来网站开发之总结(中国传统路线:血淋淋的散乱道路)

一.序幕 去年年底来到现在这个公司&#xff0c;这段时间内发生很多事情&#xff0c;直接或者间接的改变了这个创业互联网公司的命运。 关键角色有BOSS&#xff0c;PM&#xff0c;CTO。 BOSS在这个行业做了十几年&#xff0c;有了积累&#xff0c;然后想做做行业网站。听说同…

小说阅读网站的‘作者’为何不用实名制?

我们注意到&#xff0c;绝大部分小说阅读网站对‘作者’不用实名制。是什么原因导致的呢&#xff1f; 一、原因分析 其实网络作者&#xff08;注意&#xff0c;不是‘作家’&#xff09;之所以大都非实名制&#xff0c;与其起源有关。 1&#xff09;因为TA们一开始都是草根&…

年度盛宴:2012年最佳25个响应式网站设计作品《上篇》

2012年&#xff0c;响应式网站设计成为主流&#xff0c;这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出&#xff0c;其目标是要让设计的网站能够响应用户的行为&#xff0c;根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念&#xff0c;众多大公司也把…

牟长青:浅谈如何提高网站PR值

2019独角兽企业重金招聘Python工程师标准>>> PR值如何提高&#xff0c;已经不是什么好神秘的事情。唯一的方法就是大量的增加外链&#xff0c;因此我这篇文章&#xff0c;虽然标题是如何提高PR值&#xff0c;其实主要就是讲如何增加外部链接&#xff0c;提高PR值。 …

Win7下安装配置IIS 构建自己的网站

一、首先是安装IIS。打开控制面板&#xff0c;找到“程序与功能”&#xff0c;点进去 二、点击左侧“打开或关闭Windows功能” 三、找到“Internet 信息服务”&#xff0c;按照下图打勾即可 等待安装完成 四、安装完成后&#xff0c;再回到控制面板里面&#xff0c;找到“管理工…

使用Mitmproxy工具进行小姐姐图片(不管什么网站,只要是.jpg格式的图片都可自动下载)的批量下载

抓取目标: 1.首先Mitmproxy工具的下载及使用: 点我观看! 2.实战——小姐姐图片批量下载: 实现——在你使用浏览器欣赏你自备的小姐姐图片资源的时候自动下载哦! <

分享35个富有创意的蓝色网站设计作品

蓝色是网页设计中最流行的颜色之一&#xff0c;蓝色表现出一种美丽、冷静、理智、安详与广阔。由于蓝色沉稳的特性&#xff0c;具有理智、准确的意象&#xff0c;在商业设计中&#xff0c;强调科技&#xff0c;效率的商品或企业形象&#xff0c;大多选用蓝色当标准色。今天这篇…

从零开始Web自动化(三):通过selenium,9行代码实现打字网站的自动打字

写在前面&#xff1a; 这个专栏主要是分享一些python、Web自动化的相关知识。 需要你具备一定的python基础&#xff0c;参考教程&#xff1a;廖雪峰python教程 掌握红框中的内容即可&#xff01; 通过实战项目让你学会包括&#xff1a;python、selenium、测试报告、监听、特殊…

从零开始Web自动化(四):如何过打字网站的作弊检测,从而实现排行榜第一

一、分析和解决思路 上篇博文中&#xff0c;我们的程序被检测出作弊了&#xff0c;那如何过检测呢&#xff1f; 思路&#xff1a; 我们打的太快了&#xff0c;完全超出了人类的极限。 而且也不可能一直都是一个速度&#xff0c;也不可能每个字母都打正确。 那我们要让程序打的…

网站url过滤不严格造成下载任意文件漏洞

年底了很忙&#xff0c;最近一直在处理安全问题&#xff0c;其中有一例比较有代表性&#xff0c;于是想拿出来说说。大概是这样的&#xff0c;网站在某个目录下提供pdf文档下载&#xff0c;但是出现了安全问题&#xff0c;通过对路径和文件名的修改&#xff0c;指定下载linux系…

优化网站设计(二十三):减小Cookie的体积

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过&#xff0c;我在不同的场合也分享过这样的话题。 作为通用的原则&#xff0c;雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices fo…

29.保姆级教程带你做一个属于自己的博客网站

功能介绍: 页面功能主页index.html展示添加博客和博客列表的文字,实现页面跳转添加页add.html输入文章标题及内容,并将内容提交到数据库中列表页list.html将数据库中所有博客展示到前端页面中,点击文章可以查看文章的详情,附带编辑和删除的功能详情页detail.html显示文章的…

全球最值得模仿的500个网站(扫描版pdf)

有空看看&#xff0c;可能会来灵感&#xff01;下载地址&#xff1a;&#xff08;格式&#xff1a;pdf|大小&#xff1a;44.4MB&#xff09;http://down.51cto.com/data/1103656转载于:https://blog.51cto.com/xuqin/1378226

Struts2漏洞拉响网站安全红色警报以及把Struts2更新为最新版本Struts2.3.15.1步骤

360网站安全检测平台今日发布红色警报称&#xff0c;广泛应用在国内大型网站系统的Struts2框架正在遭到黑客猛烈攻击。利用Struts2“命令执行漏洞”&#xff0c;黑客可轻易获得网站服务器ROOT权限、执行任意命令&#xff0c;从而窃取重要数据或篡改网页&#xff0c;目前国内至少…

eclipse怎么卸载_田柯:网站数据库怎么建?

今天&#xff0c;来说说&#xff0c;网站数据库怎么建&#xff1f;不废话&#xff0c;上干货&#xff01;1 新建数据库表F:Websitewitiso23noteswwu.mdb&#xff08;按上述字段&#xff09;。2 新建网页F:Websitewitiso23notes admin.asp&#xff08;连接数据库的asp代码(ADO连…

VS2005开发WAP网站初识

准备 首先要选一款WAP浏览器&#xff0c;在这方面就看用户习惯了。我选的是M3Gate&#xff0c;它对WML标签标准要求比较严格&#xff0c;支持WMLScript。有关模拟器请Googlewap模拟器。 开发步骤 1.通过"文件"&#xff0d;"新建网站"&#xff0d;"ASP…

如何利用机器学习和Gatsby.js创建假新闻网站

我们对错误消息并不陌生。假新闻和假标题并不是现代发明。甚至早在20世纪初就有了黄色新闻&#xff0c;它只是使用各种道德上有问题的策略来吸引人们购买报纸和其他媒体形式的注意力。在没有报纸订阅的情况下&#xff0c;公司必须为每一笔销售而战&#xff0c;而当你最好的营销…

大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 《大型网站技术架构》读书笔记&#xff1a; 1.1大型网站软件系统的特点 与传统企业应用系统相比&#xff0c;大型互联网应用系统有以下特点。 高并发&#xff0c;大流量 高可用 海量数据 用户分布广泛&#xff0c;网络情…

配置ISA Server以创建站点到站点××× 连接

在本练习中&#xff0c;您将在两个 ISAServer 阵列之间测试和使用站点到站点 连接。注意&#xff1a;本实验室练习使用以下计算 机&#xff1a;Denver - Florence - Berlin - Istanbul 本次实验的目的&#xff0c;是启使用前两个步骤所建立的站点到站点连接的配置在 Florence …

网站备份解决方案实战操作讲解(学生分享)

说明&#xff1a;建议博友先观看&#xff1a;人人都是讲师的教学培训体系介绍http://oldboy.blog.51cto.com/2561410/1111405人人都是讲师-学生分享-网站架构备份解决方案实现讲解&#xff08;陶同学分享讲解&#xff09; 1&#xff09;实战考试题描述 2&#xff09;实战考试逻…