61阅读

asp.net课程设计-ASP.NET Core环境设置教程(2)

发布时间:2018-01-26 所属栏目:asp.net教程下载

一 : ASP.NET Core环境设置教程(2)

Asp.Net Core是Asp.Net的一个重大的重新设计。

这个话题介绍了ASP.NET Core的新的概念,并解释它们如何帮助您开发现代的web应用程序。

使用ASP.NET Core开发应用程序,以下必须安装在你的系统:

Microsoft Visual Studio 2015

Microsoft .NET Core 1.0.0 - VS 2015 Tooling Preview 2

微软提供了一个免费版本的Visual Studio,它里面还包含了SQL Server,它可以从www.visualstudio.com/en-us/downloads/downloadvisual-studio-vs.aspx下载,微软的.Net Framework Core1.0.0 - VS 2015Tooling Preview 2可以从https://go.microsoft.com/fwlink/?LinkId=817245.下载。

安装Microsoft Visual Studio 2015

现在让我们了解安装所涉及的步骤

步骤1−下载完成后,运行安装程序。将显示以下对话框。

步骤2−在上面的截图中点击安装按钮。安装过程将开始。

步骤3−安装过程成功完成后,您将看到下面的对话框。

步骤4−关闭这个对话框,如果需要重新启动你的电脑。

第五步−Visual studio从开始菜单中打开。

这将打开下面的对话框,第一次准备(只)它将花费一些时间。

步骤6−现在你会看到Visual studio的主窗口。

步骤7−Visual Studio安装后,关闭微软Visual Studio,然后安装Microsoft .NET Core 1.0.0 - VS 2015 Tooling Preview 2

步骤8−检查复选框,然后单击Install。

步骤9−一旦安装完成后,您将看到以下消息。

步骤10−现在可以使用ASP.Net Core启动您的应用程序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持61阅读。

二 : asp.net课程设计

摘 要

随着Internet的发展,网站的作用越来越重要,被称之为继广播、报纸、杂志、电视后的第五种媒体——数字媒体,拥有众多优势,所以现在不少企业都有或正在建设自己的网站。(www.61k.com)而留言板作为网站重要的一个部分,从来就是一个大家交流的平台!留言板是一种最为简单的BBS应用,借助留言板,浏览者可以张贴留言的方式给站长、版主或其他浏览者进行留言和提问。

本文主要介绍留言板系统的设计思路和制作过程,从留言板的重要性开始,介绍我的留言版采用的ASP技术和ACCESS数据库,进而阐述整个留言板系统的制作过程和具体的设计思路。该留言板较全面地利用asp技术实现留言板的基本功能:留言、回复、删除,并增加了一些特色功能。最后介绍自己在设计过程的心得体会。

关键字 ASP,留言板管理系统,ACCESS数据库

asp.net课程设计 asp.net课程设计

第一章 绪论

1.1 引言

科学技术飞速发展的今天,计算机科学及互联网日渐成熟,其强大的功能已为人们深刻认识,它已经进入人类社会的各个领域并发挥着越来越重要的作用。(www.61k.com]各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

随着网络热潮的发展,一些公司正在积极建立自己的网站,一些大学也已经开设了网络相关的专业及课程。 同时网站的重要性也越来越重要。而作为网站中交流的中心,留言板起到了至关重要的地位。它有助于版主收集网站的反馈信息,也是客户通过网络收集信息的有力工具。

留言板在一个网站具有很重要的地位,随着上网的普及,留言板已经不是什么新鲜事物了。本文主要介绍了用ASP技术和ACESS技术来创建留言板的整个过程和代码的设计!本留言板更注重安全和与网站融合,但也有自己独特之处。相信通过本文的介绍,很快就学会了留言板的制作。

1.2 设计概要

随着Internet的发展,网站的作用越来越重要,被称之为继广播、报纸、杂志、电视后的第五种媒体——数字媒体,拥有众多优势,所以现在不少企业都有或正在建设自己的网站。而留言板作为网站重要的一个部分,从来就是一个大家交流的平台!留言板是一种最为简单的BBS应用,借助留言板,浏览者可以张贴留言的方式给站长、版主或其他浏览者进行留言和提问。

1.3 问题分析

留言板管理系统主要是提供给大众的一个操作系统,便于网上交流,谈论。功能块的相应操作分别由其对应的子模块实现。通过互联网把你想说的话想问的事发表出去,方便大家交流。同时,留言板后台可通过一个简化的自动的信息管理系统,使网友留言管理工作系统化,规范化,自动化,从而达到提高网络作用和管理的目的。

留言管理系统,是用ASP或其它脚本语言编写的网络应用程序。在网络用户交流中起很大的作用,每个人都可以将他的资料和要求等信息保留

asp.net课程设计 asp.net课程设计

在页面上,以供他人观看。[www.61k.com)留言板供其他网友给自己留言,或者临时存放自己的感受。留言操作相对简单,在您进入网站后,进入任何一个留言板或社区均可以看到有输入框,输入后提交即可。留言板提供完备的信息发布功能,在网络用户交流中也有很大的作用。

而我的这个留言系统仅仅是简单的留言和管理员对留言板进行设置和进行回复、删除管理的工具。该留言板简单但实用,而且具备了大多数留言板的基本功能。十分适合于中小型网站使用。

科学技术在不断地提高,计算机网络技术也日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用,现在许多国外和国内的网站均使用了网上注册、网上查询、网上发表论文、等一系列的网上信息服务。通过计算机网络实现足不出户就可以了解各种信息、咨询问题、收索资料等,有了这样的一个网络平台,节省了大量的人力物力。

1.4 可行性分析

1.4.1 技术可行性

本留言系统主要是采用ASP技术开发,以Access 2003作为后台数据库开发工具。开发环境为 Windowns 7操作系统+IIS Web服务器,运用这种技术开发一个简单的留言薄系统应该说是完全能够做到的。

1.4.2 经济可行性

当今社会能够及时准确的获得信息便可以创造出巨大的经济效益,而本系统的设计初衷就是提供一个信息交流、咨询共享的平台,人们可以通过它析取出自己有用的信息,因此它所创造出的巨大经济效益将远远超过系统的开发和维护成本。

1.4.3 操作可行性

而本系统开发的目标之一就是界面美观,操作方便,满足用户的基本需求,相信只要是上过网的用户,便能很快上手本留言系统。

asp.net课程设计 asp.net课程设计

第二章 系统分析

2.1 系统需求分析

也就是用户要的留言所能做的工作。(www.61k.com]用户使用留言是按照一定的流程来进行的:用户注册登录进入留言,可以就某个话题展开讨论,通过留言功能发布新的话题,通过回帖的功能回复已有的话题;管理员要管理留言,系统需要具有的功能有创建、删除留言的版块,管理注册的用户,管理留言,

设置留言基本参数。这样的流程就决定了留言所应具有的功能,留言功能 流程如图1.1所示。

asp.net课程设计 asp.net课程设计

开发一个留言系统,首先需要确定留言的功能是什么,

图2.1 留言功能流程图

通过上面的分析,总结留言的功能有以下几项: 留言版块列表;浏览留言;发帖回帖;编辑留言;删除留言;用户注册;用户登录;控制用户权限;修改注册信息;设置留言参数;管理版块;管理用户。

观察留言所有功能需求,按不同实体分类,可以分为四类实体对象:版块、留言、用户和留言。这四类对象,可以设计为四个数据实体,如果使用数据库存储它们,即可以设计四个基本数据表的集合来存储这些实体

asp.net课程设计 asp.net课程设计

的基本信息;它们可以设计为四个基本表,映射四个实体的基本数据。[www.61k.com)这些基本对象只是留言系统中最为基本的要素,对于一个完整的留言还需要其它相关的表来记录相关的信息,即实体之间的相互关系信息。

留言一般存在两种用户,注册用户和管理员。用户的权限是向下覆盖的,即上级权限包含下级权限,在这个留言中,管理员的权限是上级权限。

留言系统的用户浏览信息功能,是用户讨论问题的平台,发帖、浏览、回帖一直贯穿用户的整个活动。同时,由于留言系统的留言管理是管理员在留言浏览时进行的,因此编辑、删除等功能也安排在浏览信息时实现,只是一般用户没有权限做这些动作。其它与管理员相关的功能,包括版块管理、用户管理和留言设置的都是需要管理员在管理模块进行操作。

下面就管理员所做的管理进行介绍:

查看留言:任何用户可以根据发言者留下的邮箱地址发邮件。

删除留言:如果用户发表了不符合留言规则的留言,则需要管理员删除这些留言。

管理版块:留言版块需要先创建,才能被使用,管理员还可以删改版块的相关信息。

设置参数:留言一般有一些初始化信息,比如留言名称、每页显示留言数量等参数信息,管理员可以在后台界面自行设置。

2.2 模块设计

图如图1.2所示。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

浏览版块、浏览主体帖列表、查看留言组合成浏览模块;用户发帖;管理员编辑留言、删除留言。[www.61k.com]以上四个模块组成用户使用的基本功能模块。扩展功能模块都是与管理员相关的,设置留言参数单独为留言设置模块;创建、修改和删除版块为管理版块模块;删除和回复为管理用户模块。

从以上分析,可以得到留言的功能框架,即系统的各个部分已经确定,对于留言系统来说,各个模块之间用一条主线串联起来,才能构建完整的系统。联系各个模块的主线是使用者的权限,用户能使用留言的哪些功能是由用户的权限决定的。留言的每个功能都与相应的权限相对应。同一类

asp.net课程设计 asp.net课程设计

用户使用的功能模块,是以使用者为中心连接起来的。(www.61k.com]另外,操作同一类事物的功能模块,也是有相互关系的。因此,浏览模块与发帖回帖模块、管理留言模块关联,是由留言的系统流程决定的。而管理版块模块与浏览模块关联,是由留言与版块的父子关系决定的,留言附于版块,先有版块,后有留言,留言必须发表在某个版块中。还有管理用户模块与注册登录模块关联,是由同一类对象(用户)决定的,用户注册后获得留言的身份,成为用户,所有的用户需要接受管理员的管理,用户登录证明自己的留言中身份。由此,设计出留言系统的整体框架,如图1.3所示。

图2.3 留言整体架构图

2.3 系统开发环境

2.3.1 MVC三层构架

MVC是Model-View-Controller的简写,“Model”代表的是应用的业务逻辑,“View”是应用的表示面,“Controller”是提供应用的处理过程控制,通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

2.3.2 开发工具简介

1. ASP简介

ASP是Active Server Page的简写。ASP技术能让Web开发员和网页设计员快速地开发容易维护的动态Web主页。ASP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。ActiveX Data Oject(简称ADO)技术与ASP结合使用,可以具备存取数据库的功能, 主要实现三方面的功能:建立与数据库的连接,执行SQL声明以及处理SQL执行结果。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

2. IIS简介

IIS是Internet Information Server的缩写,它是微软公司主推的服务器,IIS与WindowNT Server完全集成在一起,因而用户能够利用Windows NT Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。(www.61k.com)IIS支持与语言无关的脚本编写和组件,通过IIS,开发人员就可以开发新一代动态的,富有魅力的 Web站点。 IIS完全支持VBScript,JScript开发软件以及Java,它也支持 CGI和WinCGI,以及ISAPI扩展和过滤器。IIS的一个重要特性是支持ASP。IIS 3.0版本以后引入了ASP,可以很容易的张贴动态内容和开发基于Web的应用程序。对于诸如VBScript,JScript。

3. Access简介

Access是Office系列软件中用来专门管理数据库的应用软件。所谓数据库是指经过组织的、关于特定主题或对象的信息集合。数据库管理系统分为两类:文件管理系统和关系型管理系统。Access应用程序就是一种功能强大且使用方便的关系型数据库管理系统,一般也称关系型数据库管理软件。它可运行于各种Microsoft Windows系统环境中,由于它继承了Windows的特性,不仅易于使用,而且界面友好,如今在世界各地广泛流行。它并不需要数据库管理者具有专业的程序设计水平,任何非专业的用户都可以用它来创建功能强大的数据库管理系统。

2.4 数据库结构设计

该系统的实体有:管理员信息实体、用户信息实体、留言实体、版面信息实体。实体之间的E-R图如图1.4所示。

asp.net课程设计 asp.net课程设计

图2.4 实体间的关系E-R图 考虑到将来功能上的完整性,设计如下面所示的数据项和数据结构:

用户信息:包括数据项有用户名、密码、头衔、头像、用户等。(www.61k.com) 留言信息:包括数据项有所属版面、父留言的编号、子留言的编号、用户、主题、内容、发表时间等。

基于上面的内容,设计了下列表,这些表之间相互关联,共同存储着系统所需要的数据。在设计数据库表的过程中,一般要遵循几条原则:数据库设计一个表最好只存储一个实体或对象的相关信息,不同的实体最好存储在不同的数据表中,如果实体还可以再划分,实体的划分原则是最好能够比当前系统要开发的实体的复杂度小;数据表的信息结构一定要合适,表的字段的数量一般不要过多;扩展信息和动态变化的信息一定要分开在不同的表里;多对多这样的表关系尽量不出现等。

留言版面表note_comment: 记录所有的留言版面的信息

版块表note_comment2:版块信息。

后台留言配置表note:对留言的某些信息进行配置,如留言URL地址、公司名称、主页URL地址等,进行这些设置是为了尽可能最大地利用使用有限的资源,同时更有效地管理留言,对访问留言的用户量信息也有一个很好的记录。

用户表users:记录了用户的基本且必要的信息。

管理员表note_admin:记录了管理员账号、密码、回复。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

设计数据表间的关系为双层对应,就是简单的针对某一留言管理员进行回复。(www.61k.com]

2.5 开发模式

网站建设目前主要有两种基本的开发模型:两层模型、三层模型。B/S结构是真正的三层结构,它以访问WEB数据库为中心,HTTP为传输协议,客户端通过浏览器(Browser)访问WEB服务器和与其相连的后台数据库,我们称之为B/S(Browser/Server)模式。其三级结构组成如下图所示:

图3.1 开发模式图 图中从左到右,分为三个层次:

第一层是客户端即浏览器,主要完成客户和后台的交互及最终查询结果的输出功能。在客户端向指定的Web服务器提出服务器请求,Web服务器用HTTP协议把所需文件资料传给用户,客户端接受并显示在WWW浏览器上;

第二层Web服务器是功能层,完成客户的应用功能,即Web服务器接受客户请求,并与后台数据库连接,进行申请处理,然后将处理结果返回Web服务器,再传至客户端;

第三层数据库服务器是数据层。数据库服务器应客户请求独立地进行各种处理。与传统的C/S模式相比,B/S结构把处理功能全部移植到了服务器端,用户的请求通过浏览器发出,无论是使用和数据库维护上都比传统模式更加经济方便。而且使维护任务层次化:管理员负责服务器硬件日常管理和维护,系统维护人员负责后台数据库数据更新维护。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

第三章 概要设计

3.1 系统总体设计

留言板系统的总体设计主要包括:

1)系统的软、硬件运行环境设计

2)系统模块设计

3)数据库结构设计

3.1.1 运行环境

? 操作系统:Windows NT/2000/XP/2003/ ? 安装IIS

? 安装Access 2007

? 安装Visual Studio.NET 2005

3.2系统功能模块设计

根据对系统的分析,系统模块的结构图,如图3.1所示。[www.61k.com)

asp.net课程设计 asp.net课程设计

图3.1 系统模块的结构图

后台模块结构图如图3.2所示。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

图3.2 后台模块结构图

3.1.3 系统结构

本课题的功能模块设计如图3.3所示。(www.61k.com]

asp.net课程设计 asp.net课程设计

3.2 系统接口的概要设计

3.2.1

asp.net课程设计 asp.net课程设计

用户接口

系统的用户接口主要分为前台普通用户的操作界面和后台管理员用户操作界面。

? 首页

由头部、左侧部分、右侧内容主体部分以及尾部组成。布局设计如图3.4所示。

? 头部包括网站LOGO、导航栏、用户功能菜单等

? 左侧部分显示最新商品信息、商品分类信息,右侧部分显示搜

索栏、天气预报信息、最新商品等

? 尾部显示作品信息等

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

图3.43.3 数据库概要设计

3.3.1 逻辑结构设计(E-R)

本课题设计规划出的实体有管理员,普通用户,商品、商品信息、各地天气预报、购物车、订单、结算、分类、供应商。[www.61k.com]本课题中实体间的关系如图3.6所示。

asp.net课程设计 asp.net课程设计

3.3.2 物理结构设计

本课题目前为数据库建立了5张表。(www.61k.com)

? 商品分类信息表(Category)主要包括商品分类编号、分类名称和类别描述等。

? 商品信息表(Product)主要包括商品编号、商品分类编号、商品单价、商品成本、供应商编号、商品名称、商品介绍、商品图片和商品库存等。 ? 供应商信息表(Supplier)主要包括供应商编号、供应商名称、供应商地址、供应商所在省份、供应商所在城市、城市邮编和供应商电话等内容。 ? 订单信息表(Order)主要包括订单编号、用户名、订单日期、用户地址、用户所在城市、用户所在省份、城市邮编、用户电话和订单状态等。 ? 订单详细信息表(OrderItem)主要包括订单详细信息编号、订单编号、商品名称、商品单价、购买数量和总价等。

本课题用到了ASP.NET 2.0的新功能成员管理,角色管理机制。故将用到的成

员管理数据库表生成到了自定义的数据库中。其中aspnet_Membership表中存储系统的成员信息。aspnet_Roles表存储角色信息,本课题中设计了2个角色,即普通用户和管理员。

第四章 系统详细设计

系统详细设计

留言拥有大量的数据,这就需要对这些数据进行存储和管理建立数据库。因为当留言的在线用户很多时,就会出现“瓶颈”现象,造成阻塞,这里应该创建连接池来提高利用率。数据库建立成功后就应该进行具体的系统设计。然后,将进行留言信息页面的设计,包括主页面、发布留言相关页面等,是显示在留言页面,可以由用户(包括用户)以上级别的浏览者看到;最后,进行留言管理页面的设计,这是只能由管理员进行操作的页面,管理员会对留言进行安全、有条理的管理。

asp.net课程设计 asp.net课程设计

4.1创建与连接数据库

4.1.1数据库表的设计

设计数据库表的字段时,需要充分考虑到留言的应用特点。[www.61k.com]数据库表的设计要求简单易于理解,扩展性好。 其中记录留言发表文章的数据库表note_comment

主要有以下的以下几个描述字段:

? subject

? Name:

留言主题 发贴者姓名 留言内容 邮箱地址

主页

其他联系方式 ? Comment: ? Email: ? url: ? communication

? IP IP 地址

? PostDate

留言提交时间

4.1.2数据库的连接

Access是文件型数据库,一个文件就是一个数据库,可以利用ASP中的语法直接连接。在连接数据库之前,必须先声明一个对象来当作数据库与ASP程序之间的媒介,具体连接方式如下:

set rs=Server.CreateObject("ADODB.RecordSet")

对象

rs.open "select * from note_comment order by id desc",conn,1,3 '从数据库中读取留言,并保存在rs 中

if rs.eof and rs.bof then '不存在留言记录 '创建RecordSet

asp.net课程设计 asp.net课程设计

response.redirect "book_write.asp" '转到撰写留言页

else 前页

1

'存在记录 '每页留言条数 '每页记录数 '总页数

'从浏览器取得当

if counts=0 or counts="" then counts=10 rs.pageSize = counts

allpages = rs.pageCount page = Request("page")

If not isNumeric(page) then page=1 if isEmpty(page) or Cint(page) < 1 then

'page不是数字 'page 为空或小于

page = 1

'page 值大于总页

elseif Cint(page) >= allPages then

page = allPages

end if

rs.AbsolutePage = page

Do While Not rs.eof

UserName=rs("Name")

'用户名 '内容 '回复 '邮件 '主页 '回复人姓名 '留言序号

'转到某页头部

Comments=rs("Comment") Reply=rs("Reply") Usermail=rs("Email") url=rs("Url")

replyname = rs("ReplyName") I=I+1

temp=RS.RecordCount-(page-1)*rs.pageSize-I+1

asp.net课程设计 asp.net课程设计

%>

在打开数据库并完成相应的操作后,应关闭数据库连接。(www.61k.com]当不再需要连接时将其关闭,可以减少对数据库服务器的要求并可以使其他用户能够使用该连接。

用Connection对象的Close方法终止Connection对象和数据库之间的连接。下面的脚本打开连接,然后将其关闭:

<% End If conn.CLose

Set conn = nothing %>

4.1.3 数据添加

rs.Addnew

一条记录 rs("Name")=Request.Form("username")

rs("Comment")=Request.Form("comments")

内容

rs("Email")=Request.Form("usermail")

地址 rs("url")=Request.Form("url")

rs("Communication")=Request.Form("communication")

联系方式 rs("IP")=Request.serverVariables("REMOTE_ADDR")

'关闭数据

'添加

'姓名

'留言

'邮箱

'主页

'其他

'IP 地

asp.net课程设计 asp.net课程设计

rs("PostDate") = now() '留言提交时间

rs("Subject") = Request.Form("subject") '留言主题

rs.Update '更新数据库

4.1.4 数据删除

sub delfeedback()

'留言删除 '要删除的记录id 为空则给出提示 if delid="" or isnull(delid) then response.write "<script>alert('操作失败,没有选择合适参数,请

'返回到留言管理单击“确定”返回!');</script>"

界面

的记录

response.end response.redirect "admin_main.asp" else 'id 存在 '执行数据库中的删除操作,删除数据库中id 列的值在delid数组中conn.Execute("delete * from note_comment where ID in ("&delid&")")

'删除成功,给出提示 response.write "<script>alert('留言删除成功,请单击“确定”返

'返回到留言管理回!');</script>"

界面 response.redirect "admin_main.asp"

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

response.end end if

end sub

4.2 留言信息页面的设计

4.2.1建立查看留言相关页面

图4.1 浏览留言页面图

留言是留言的主要交流内容,是用户-网页-用户之间交流的必要手段,在留言的列表中,第一列“状态”,主要是根据图标来显示留言所处的状态,

asp.net课程设计 asp.net课程设计

这些状态在页面最底部有图例表示,接下来一列是留言的主题,留言的主题前面有加号图标的可以展开,点击留言主题可以预览留言的内容。[www.61k.com]之后是留言的作者,即发帖人。回复和人气分别记载了回复的留言的数量和浏览过的人数。最后更新和回复人指的是最后一个回复留言的时间和用户。进入留言首先看到的就是这个留言列表页,通过这一页用户可以进入浏览留言或发表回复留言的界面进行各种操作。这部分数据来源主要是留言表、用户表,其中界面的颜色设置取自管理员对界面颜色配置的变量值。

4.2.2建立发布留言相关页面

如图4-2所示是发表新帖的界面。这里只允许会员发表新留言,需要用户填写的新留言的信息包括:用户名、密码、留言主题、当前心情、具体内容等,这也是留言表里的最基本信息。其中标题不能超过50个汉字,要进行校验。其次该留言提供了一些表示心情的图片,用户只需选择一种即可。内容说明是指书写留言内容时输入框支持输入什么。具体内容输入框上的按钮可以对输入的内容进行字体方面的设置,界面比较友好,让用过Word的人很容易掌握这些小按钮的用法,其中有加粗、斜线等。输入框下方还提供一些小图片,用户可以点击表情图标就可在留言中加入相应的表情。其中是否显示签名和有回复时,使用邮件通知由作者选定,可以选择也可不选。所有内容都填写完毕后,点击“发表”按钮则数据库中相应的留言表增加一条记录,用户留言发表成功。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

图4.2 发布留言页面图

4.3留言管理页面设计

4.3.1建立管理员登录界面

管理模块访问页面admin_login.asp,数据库中默认的已经存在的用户为admin,密码admin。[www.61k.com)该模块登录时要进行用户名和密码的有效性验证,查询用户表,如果该用户存在则进入管理的主页面admin_login.asp,该校验过程中存储该用户的编号在session中,以便维持该用户的有效性连接,见图4.3。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

图4.3 留言管理登录页面图

4.3.2建立版面管理相关页面

上面介绍了登录模块,接下来在管理员登录后进入留言维护模块,负责新建留言类型,留言名称等。[www.61k.com]管理员首先看到的是留言列表。该列表页是管理员对留言进行各种操作的界面,所以要留给用户一些接口,以便用户进入到其他页面进行各种操作(新增留言分类、新增留言、分类排序修改、删除分类等)。在留言的列表页,有一个接口是“新增留言分类”,留言分类的维护包括新增、编辑和删除。如图4.4所示是点击新建留言分类的部分界面,管理员须填写分类名,点击添加即可添加一个新的留言分类。相应的数据库的留言分类表里增加一条记录。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

下面进入留言内容的维护阶段的设计,该模块的设计用于维护用户使用的留言,包括留言的基本信息和显示样式,是该系统的主要模块。[www.61k.com]这些信息的描述是一个留言所必需的,用户所看到的留言属性和显示信息从这里提取相应的信息,因此该设定是非常重要的,不仅涉及到管理,还影响显示和功能。

图4.4 留言管理页面图

4.3.3建立参数设置相关页面

基本变量设置的界面维护该留言的一些公共基本信息,留言变量设置的代码如下所示。该管理变量的设计和开发完全是为留言的显示服务的,因此设计宗旨就是一切为了留言的面貌和管理。

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

%>

<%

Sub setup()

if request("save")="ok" then '保存设置 '创建RecordSet 对象

Set NArs=Server.CreateObject("ADODB.Recordset")

'从数据库note_admin中查询id 列的值为Session("id") 的记录,并保存在NArs 中

NArs.open "select * from note_admin where id="&Session("id"),conn,1,3

'创建RecordSet 对象

'资料填写不完整 if trim(request.form("sitename"))="" or Set WBrs = Server.CreateObject("ADODB.RecordSet") '从数据库web 中查询所有记录,并保存在WBrs 中 WBrs.Open "Select * from web",conn,1,3 trim(request.form("admin"))="" or trim(request.form("maxlength"))="" or trim(request.form("counts"))="" or trim(request.form("replycolor"))="" or trim(request.form("isreply"))="" or trim(request.form("distance"))="" then

'给出提示,并返回到前一页 response.write "<script>alert('资料填写不完整或有错误,请检查后重新提交。(www.61k.com)');history.back();</script>"

response.end end if

asp.net课程设计 asp.net课程设计

'输入的留言主题最大长度、留言内容最大长度、每页留言数和表格间距不是数字

if (not isNumeric(request.form("subjectmaxlength"))) or (not

or (not isNumeric(request.form("maxlength")))

isNumeric(request.form("counts"))) or (not isNumeric(request.form("distance"))) then

'给出提示,并返回到前一页 response.write "<script>alert('资料填写不完整或有错误,请检查后重新提交。[www.61k.com)');history.back();</script>"

WBrs("sitename")=Request.Form("sitename") '站点名称 response.end end if NArs("admin")=Request.Form("admin") '管理员姓名 if trim(request("password"))<>"" then NArs("pwd")=trim(Request.Form("pwd")) '密码 End If WBrs("SubjectMaxLength") = Request.Form("subjectmaxlength") '留言主题最大长度 WBrs("maxlength")=Request.Form("maxlength") '留言内容最大长度 WBrs("counts")=Request.Form("counts") '每页留言数

asp.net课程设计 asp.net课程设计

WBrs("mail")=Request.Form("mail") '是否必填邮箱 NArs("isreply")=trim(Request.Form("isreply")) '回复提示 NArs("replycolor")=trim(Request.Form("replycolor")) '回复颜色 WBrs("distance")=Request.Form("distance") '表格间距 NArs.update '更新数据库 WBrs.update NArs.Close '更新数据库 '关闭RecordSet 对象 Set NArs = nothing WBrs.Close '关闭RecordSet 对象 Set WBrs = nothing '保存成功,给出提示,并返回到管理选项界面 response.write "<script>alert('您提交的设置已保存。(www.61k.com]');location.href='admin_set.asp';</script>"

response.end End If

End Sub

asp.net课程设计 asp.net课程设计

conn.CLose

'关闭数据库连接

Set conn = nothing

asp.net课程设计 asp.net课程设计

%>

asp.net课程设计 asp.net课程设计

5.1配置运行

1. Microsoft Office, IIS 的安装和程序的安装。(www.61k.com)IIS(WinNT平台下)和PWS(Win9X平台下)属同一事物,是ASP的开发平台、运行后台,也是服务器的运行软件。安装IIS或PWS之后,最重要的就是要设置虚拟目录。如果没有虚拟目录,网页将无法访问。

2.启动程序

(1)启动IIS;

(2)在IE地址栏输入地址http://localhost,就能访问IIS的默认主页面;

(3)在IE地址栏输入地址http://localhost//index.asp,就能访问系统的前台首页面;

(4)页面的后台的登录入口中输入用户名admin,密码admin,登录后台管理系统,管理员可以注册用户,填写用户信息,然后就可以拥有用户身份。

5.2调试过程

在调试过程中,系统可能会出现一些错误,下面就常见的问题予以指出与解决。

(1)出现数据库创建错误。错误原因:数据库没有创建。解决方法:运行Microsoft Office Access, 创建NOTES.MDB文件, 并按照前文所述设计表格。并建立的用户、密码,然后修改对应的配置文件。当所有的数据库准备工作完成以后,再输入以上的地址,进行数据库连接的测试。如果配置的数据库连接的配置参数按照以上的说明进行,此步骤正确。数据库连接测试成功后。最后对部分数据进行数据的初始化,以使系统在启动后能正常运行。完成后,数据库的连接问题解决了。

asp.net课程设计 asp.net课程设计

(2)在系统安装结束后,在地址栏输入地址时出现访问页面错误。[www.61k.com)错误原因是:IIS的主目录配置出错,找不到虚拟目录。解决方法IIS, 添加虚拟目录。设虚拟目录的方法是:打开控制面板→管理工具,选择“Internet 服务管理器”,展开后在“默认 Web 站点”(或默认网站)点鼠标右键,选择“新建→虚拟目录”,别名写bbs,目录找到ASP网页所在目录,把“执行、写入、浏览”等都打上勾。

第六章 测试与分析

asp.net课程设计 asp.net课程设计

asp.net课程设计 asp.net课程设计

6.1 测试实例(测试集)的研究与选择

测试是为了发现程序中的错误而执行程序的过程。[www.61k.com)好的测试方案是尽可能发现尚未发现的错误的测试方案。

本节分别介绍各个功能的测试用例及其预期结果。

身分验证与角色判断功能

? 测试步骤

①) 以这些实例信息注册各个角色的用户。

②) 以不同身份登录系统进行操作,如购买商品,查询信息,修改个人信息,管理员管理后台信息等操作。

③) 观察系统运行状态。

? 预期结果

体统向不同角色的用户现实不同的操作选项,并且不同角色只能访问权限范围内的页面。各个菜单项如图6.1所示。

6.2 性能分析

? 系统安全性能分析

本课题采用了ASP.NET 2.0中新增功能身份认证系统,利用此功能可以快速建立用户管理子系统,功能十分完善,保证了系统的安全性能。

本课题利用ASP.NET 2.0提供的控件以及后台强大功能类,完成了成员管理、角色管理的功能。

? 系统稳定性能分析

由于系统在设计时采取限制用户错误输入原则(包括对输入的完整性和合法性的检查等),因此这在很大程度上保证了系统的稳定性。在经过大量、多类型复杂组合反复多次测试后,系统始终运行稳定,说明系统的稳定性具有一定可信度。

第七章 总结

asp.net课程设计 asp.net课程设计

经过一个月的努力,系统终于按预期的结果顺利完成了。[www.61k.com]从系统最初的需求分析、设计,到最后实现的过程中,经过多次反复的修改,功能逐渐完善,已经基本达到了实用,方便,人性化等预期目标。

7.1 系统总结

7.1.1 系统存在的问题

本课题在设计业务层的业务对象类是,没有完成对象类的属性设计,没能更真实的模拟现实中的业务实体。所以代码中对实例对象的数据进行操作时都是以数据集合的形式进行,无法实例化每个实体。

7.1.2 系统改进建议或设想

进行类的进一步封装:

? 进一步封装类。

? 设计每个实体的包装类,设计出其对应的属性以及构造方法。 ? 将数据库操作类封装到一起。

7.2 个人总结

经过近几个星期的努力,终于设计出一个基本达到要求的设计。其功能比较完整,用户 界面良好,但是也存在着一些缺陷。 这一段时间的努力,最后的结果固重要,但更重要的是它让自己了解了设计 的一般过程。在做一个项目的时候,首先是进行需求分析,既各种功能需求以及 系统结构都要在需求分析中做出来。接下来做的就是逻辑结构设计,通过逻辑结 构设计出数据库。然后就是详细设计,通过需求分析中对各种功能的描述,利用 3 自己所学的 ASP 知识编写出相应的功能模块界面,这是个比较繁琐的阶段,需 要大量的编写和修改各部分代码,以确保系统整体的可运行性。最后就到了验收 成果的阶段,通过系统的运行测试,了解系统的一些问题和不足,并做出一定的 修改,最终得到了现在的成果。 克服困难,坚持不懈是一个成功人士的所必需的品质。同样作为一个软件编 程者更是必不可少的。只有敢于对困难说不,我们才能成为真正的软件编程者。 不懈上帝是公平的,又付出就有回报。眼前的困难只是你前进路上的绊脚石。只 要我们不怕痛,我们就能坚持的走下来,最终走向胜利。 在这一年的学习中,我终于体会到 SQL Server 2000 功能的功能丰富,表达 能力强,使用灵活方便,应用面广。但是在其优势后面必然也隐藏着劣势,那就 是对程序员的要求特别高。随着社会的发展,人类需要处理的数据越来越多,对 数据管理的要求也越来越重要。软件的发展也从面向程序发展成为面向数据。心得体会

asp.net课程设计 asp.net课程设计

课程设计是培养学生综合运用所学知识 ,发现、提出、分析和解 决实际问题,锻炼实践能力的重要环节,是对我们的实际操作能力的 具体训练和考察过程.。(www.61k.com]虽然只是短短几天,但是我却学到了很多东 西,巩固了以前所学过的知识。通过这次课程设计使我懂得了理论与 实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的 理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己 的实际动手能力和独立思考的能力。编程是一件很枯燥很无聊的事 情, 但是出于完成作业, 得到学分的压力, 还必须强破自己坚持下去, 按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高 精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的 小的错误而导致整个程序的无法运行。 所以认真仔细就是非常重要的 了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序 4 运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。 又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和 漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过 努力得到的成绩,同时也是学习 SQL 语言的一次实践作业,自己进步 的证明。通过这次课程设计,使我对 SQL 语言有了更进一步的认识和 了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学 习它。我也发现我的好多不足之处,所以在今后学习过程中,我会更 加注视实践操作, 更好地学习计算机。 在以后的生活和学习的过程中, 我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!

参考文献:

[1]. 尚俊杰,《网络程序设计——ASP》 .清华大学出版社,北方交通大学出版社.2002.1

[2]. 丁广贵,《ASP编程基础与实例》机械工业出版社2003.4

[3]. 刘瑞新、汪远征、程伯言 等编著,《ASP编程基础及应用教程》 机械工业出版社2005.2

[4]. 汪晓平、钟军等编著 ,《ASP网络开发技术(第二版)》 人民邮电出版社.2003.12

[5]. 邹婷主编 , 《ASP网络程序员就业实践教程》.中国青年出版总社.2005.4

[6]. 萨师煊、王珊编著, 《数据库系统概论(第三版)》. 高等教育出版社2000.2

[7]. 罗布、西曼等,《Access数据库设计、开发和部署(第二版)》 清华大学出版社.2005.3

[8]. 申莉莉编,《数据库系统与Access教程》清华大学出版社/中国劳动社会保障

出版社.2003.12

[9]. 陈志泊等著 ,《数据库原理及应用教程》. 人民邮电出版社2002.3

[10]. 李禹生,《ASP实用技术.网络数据库应用系统设计》.中国水利水电出版社.2004

[11]. 邓文渊、陈惠贞、陈俊荣,《ASP与网页数据库设计》。中国铁道出版社。2004.5

[12]. 邓文渊,文渊阁工作室,《挑战——Dreamweaver MX互动网站站白宝箱 for

ASP》,中国铁道出版社,2004.3

[13]. 曹建主编 ,《Dreamewaver与ASP实战演练(第一版)》,.电子工业出版社,2001

asp.net课程设计 asp.net课程设计

年1月

[14] . Ruimin Shen, Qijun Hou,《A Distance-Learning Model Based on Web

Mining》.Shanghai Jiaotong University Computer Dept.Of Science and Technology,1999

[15]. Hawkes,Lory,《A guide to the World Wide Web》. Upper Saddler River, NJ. 1999

[16]. shang junjie,《Procedure design basis of the network》,The publishing house of Tsing-Hua University, the publishing house of Northern Transportation University, 2003

三 : 《ASP程序设计》讲课幻灯片09Chapter

第9章 使用第三方组件 章

内容提要
本章主要介绍外置组件的基本概念、 本章主要介绍外置组件的基本概念 、 如 何注册外部组件,如何在程序中调用。 何注册外部组件,如何在程序中调用。 着重介绍两个网站常用的外置组件: 着重介绍两个网站常用的外置组件 : 文 件上传和E-mail组件。 组件。 件上传和 组件 最后利用VB 为了加深对组件的理解 , 最后利用 6.0编写一个组件,并编写 编写一个组件, 文件调用。 编写一个组件 并编写ASP文件调用。 文件调用

利用ASP的外部组件
ASP之所以功能强大,主要因为它可以调 用外部组件。 目前在网上流行着众多ASP组件,比如: 绘图组件、上传组件和电子邮件组件, 等等。

组件概述
组件为应用程序通过指定的接口函数提供一些功能。可 以把组件理解为一种程序,通过调用这种程序,实现在 ASP程序中无法实现或者很难实现的功能。许多应用程序 可以同时使用组件,因此组件提供了一种很好的代码重 用的方法。 可以利用ASP设计制作动态、交互的Web页面,但是会发 现ASP在某些方面功能不强,甚至如果不借助服务器端组 件就很难实现某些功能,例如文件上传、数据库操作, 邮件功能,文件系统操作等。但是幸运的是可以找到很 多组件来提高ASP的编程应用能力。

组件的调用方法
服务器组件和ASP内置对象不同,不能直接使用,必须首 先被实例化。利用Server对象的CreateObject方法创建一 个对象并返回这个对象的引用。语法如下:
Set objVar = Server.CreateObject(Class)

Class 表示创建什么样的对象,Class的格式一般为:“工 程名.类名 ”。 例如:
Set MyFileObject = Server.CreateObject ("Scripting. FileSystemObject“ ) 中 , 工 程 名 是 Scripting, 类 名 是 FileSystemObject。

实现文件上传
文件上传的组件很多,其中比较常用的上传组 件很多 比如ASPUpload、FileUpload等等,其中 ASPUpload FileUpload LyfUpload功能比较全,而且使用起来比较方便。 该组件是由国内ASP爱好者刘玉锋编写的,目 前众多的虚拟主机提供商在服务器上提供该组 件。

文件上传组件简介
LyfUpload是一个免费的ASP文件上传组件,可以 在ASP页面中接收客户端浏览器上传的文件。该 组件是一个DLL(Dynamic Link Library,动态连 接库)文件,名称为“lyfUpload.dll”。 该组件支持单文件上传、多文件上传、限制文件 大小上传、限制某一类型文件上传、及文件上传 重命名等功能

注册
使用一个外置组件,必须首先在服务器上注册。将 lyfUpload.dll文件复制到系统盘WINNT目录的 system32目录下 单击“开始”菜单,打开“运行”窗口。在运行窗口 中输入“regsvr32 lyfupload.dll”,注意必须

将 lyfupload.dll文件复制到system32目录下,否则程序就 找不到该组件,注册方法如图6-1所示。

组件提供的方法
1. 2. 3. 4. Request() 方法 FileType() 方法 SaveFile() 方法 About() 方法

组件提供的属性
1. ExtName属性 2. MaxSize属性 3. FileSize属性

案例9-1 文件上传
案例实现的功能是将客户端的文件上传到ASP 所在路径下的Files目录中。首先是文件选择程 序,如程序FileUpload.htm所示。 当单击“提交”按钮时,调用程序 FileUpload.asp文件处理,如下所示。

案例9-2上传文件到数据库
为了统一管理数据,有时候需要将文件保存到数据库 中。这样对数据库的字段有一定的要求。在Access中 一般利用类型“OLE 对象”来上传的各种文件。如图 9-5所示。

E-mail组件
网上贺卡非常流行,利用ASP就可以发送网上贺卡。程 序发送E-mail的另一个应用领域是:会员信息的传送。 在一个网站注册后,会收到一封系统自动发送的信, ASP可以实现此类的功能。这里介绍利用Jmail组件实 现E-mail的发送。 W3 JMail是一个发送邮件的组件,支持HTML格式的邮 件,最新的版本可以从http://www.61k.com载。 W3 JMail 发送邮件速度快、功能丰富并且是免费的。 Jmail组件使用方法如下。
set msg = Server.CreateOBject( "JMail.Message" )

案例9-3 发送E-mail
首先安装Jmail组件,安装完以后自动注册到服 务 器 上 。 Jmail 发 送 邮 件 的 使 用 方 法 如 程 序 SendMail.asp所示。
案例名称:发送 案例名称:发送E-mail 程序名称 : SendMail.asp( 执行的时候 , 需要修改用户名 、 密码和 ( SMTP服务器 服务器



程序解释
程序解释:需要解释的地方有如下4个。
(1)修改“msg.From = "发送人邮箱地址"”语句,填入自 己的邮件地址,如“msg.From = "zhangsan@tom.com"”。 (2)修改“msg.FromName = "发送人姓名"”语句,填入自 己的大名,如“msg.FromName = "zhourunfa"”。 (3)修改“msg.AddRecipient("接收人的E-mail地址", "接收 人姓名")”语句,填入自己要发送的地址,如 “msg.AddRecipient("zhangsan@tom.com", "zhangsan")”。 (4)修改“if (not msg.Send( "用户名:密码@邮箱的Smtp地 址" ))”,用户名和密码是发送人邮箱的用户名和密码,注意 中间用冒号隔开,@符号后面是邮件的SMTP地址,现在发送 邮件的服务器都需要验证是不是本系统的用户。

常见邮箱的SMTP地址
邮箱后缀 21cn.com sina.com tom.com 163.com fm365.com 263.net smtp.21cn.com smtp.sina.com.cn smtp.tom.com smtp.163.com mail.fm365.com smtp.263.net SMTP地址

案例9-4 页面发送带附件Email
页面中发送Email通常需要添加主题,内 容以及附件等内容。附件需要上传到服 务器上,然后才能发送。输入页面如图 9-10所示。

使用自己编写的组件
现在从

事ASP编程的开发人员一般都要编 写自己的组件,为了满足这种工作需要 和深入了解ASP的组件,现在通过实例自 己动手编写一个组件。 虽然比较简单,但是可以加深对组件的 理解。

案例9-5利用VB 6.0写服务器端组件
第一步:打开VB 6.0,选择新建工程中的ActiveX DLL, 单击“打开”按钮,如图9-12所示。

小结
本章重点理解组件的基本概念、 本章重点理解组件的基本概念、如何注册和调 用一个组件。 用一个组件。掌握文件上传组件常用的方法和 属性 掌握Jmail组件的使用方法 掌握Jmail组件的使用方法 熟悉VB 6.0编写一个组件以及 编写一个组件以及ASP文件调用。 文件调用。 熟悉 编写一个组件以及 文件调用

本章习题
一、选择题 1. 语句:set MyFileObject = Server.CreateObject("Scripting.FileSystemObject") 中,工程名是___________。 A) FileSystemObject B) Scripting C) Server D) File 2. 使用命令___________注册组件。 A) regsvr32 B) regsvr C) regedit D) syssvr 3. 上传图像数据到数据库时, 该字段的类型是___________。 A) binary B) OLE类型 C) 文本类型 D) 图形图像类型 4 . 语 句 : msg.Send ( "zhangsan109:123456@smtp.tom.com" ) 的 功 能 是 ___________。 A) 给zhangsan109发送邮件 B) 给smtp.tom.com发送邮件 C) zhangsan109给别人发邮件 D) 123456给别人发邮件

二、填空题
1 . 表 单 属 性 中 一 定 要 包 含 语 句 ______________________,此时处理的 , 文件是一种Form数据 , 所以一定要加上这条 数据, 文件是一种 数据 语句,否则文件不能上传。 语句,否则文件不能上传。 2 . 上 传 组 件 的 属 性 设 置 为 : obj.extname="gif" 功 能 是 ______________________。 。

三、简答题与程序设计题
三、简答题与程序设计题 1. 内置组件和外置组件有什么区别? 2. 得到一个新的外置组件,如何在服务器上注册? 3. 文件上传组件有哪些属性和方法?功能是什么? 4. 文件上传程序的文件输入表单和一般的表单有什么区别? 5. 新建一个Jmail的Message对象为msg,语句“msg.Send( "用户名:密 码@邮箱的Smtp地址" )”中的用户名、密码和SMTP的地址分别是什么 含义?如果某人的邮箱是lisi@fm365.com,密码是aaabbbccc,如何设置 这三个参数? 6. 根据自己的情况,改编案例9-3中的程序,使之能发送邮件。(上机练 习) 7. 编写一个组件,包含一个方法,该方法实现求一个输入值的立方,方 法 名 为 zzz。 该 组 件 调 用 的 方 法 必 须 是 : “Server.CreateObject("abc.def");”。(上机练习)


四 : ASP.NET MVC SSO单点登录设计与实现代码

实验环境配置

HOST文件配置如下:

127.0.0.1 app.com
127.0.0.1 sso.com

IIS配置如下:

应用程序池采用.Net Framework 4.0

注意IIS绑定的域名,两个完全不同域的域名。

app.com网站配置如下:

 

 sso.com网站配置如下:

memcached缓存:

 数据库配置:

 数据库采用EntityFramework 6.0.0,首次运行会自动创建相应的数据库和表结构。

授权验证过程演示:

在浏览器地址栏中访问:http://app.com,如果用户还未登陆则网站会自动重定向至:http://sso.com/passport,同时通过QueryString传参数的方式将对应的AppKey应用标识传递过来,运行截图如下:

URL地址:http://sso.com/passport?appkey=670b14728ad9902aecba32e22fa4f6bd&username=

 输入正确的登陆账号和密码后,点击登陆按钮系统自动301重定向至应用会掉首页,毁掉成功后如下所示:

 由于在不同的域下进行SSO授权登陆,所以采用QueryString方式返回授权标识。同域网站下可采用Cookie方式。由于301重定向请求是由浏览器发送的,所以在如果授权标识放入Handers中的话,浏览器重定向的时候会丢失。重定向成功后,程序自动将授权标识写入到Cookie中,点击其他页面地址时,URL地址栏中将不再会看到授权标示信息。Cookie设置如下:

登陆成功后的后续授权验证(访问其他需要授权访问的页面):

校验地址:http://sso.com/api/passport?sessionkey=xxxxxx&remark=xxxxxx

返回结果:true,false

客户端可以根据实际业务情况,选择提示用户授权已丢失,需要重新获得授权。默认自动重定向至SSO登陆页面,即:http://sso.com/passport?appkey=670b14728ad9902aecba32e22fa4f6bd&username=seo@ljja.cn 同时登陆页面邮箱地址文本框会自定补全用户的登陆账号,用户只需输入登陆密码即可,授权成功后会话有效期自动延长一年时间。

SSO数据库验证日志:

用户授权验证日志:

用户授权会话Session:

数据库用户账号和应用信息:

应用授权登陆验证页面核心代码:

 /// <summary>  /// 公钥:AppKey  /// 私钥:AppSecret  /// 会话:SessionKey  /// </summary>  public class PassportController : Controller  {  private readonly IAppInfoService _appInfoService = new AppInfoService();  private readonly IAppUserService _appUserService = new AppUserService();  private readonly IUserAuthSessionService _authSessionService = new UserAuthSessionService();  private readonly IUserAuthOperateService _userAuthOperateService = new UserAuthOperateService();  private const string AppInfo = "AppInfo";  private const string SessionKey = "SessionKey";  private const string SessionUserName = "SessionUserName";  //默认登录界面  public ActionResult Index(string appKey = "", string username = "")  {  TempData[AppInfo] = _appInfoService.Get(appKey);  var viewModel = new PassportLoginRequest  {  AppKey = appKey,  UserName = username  };  return View(viewModel);  }  //授权登录  [HttpPost]  public ActionResult Index(PassportLoginRequest model)  {  //获取应用信息  var appInfo = _appInfoService.Get(model.AppKey);  if (appInfo == null)  {  //应用不存在  return View(model);  }  TempData[AppInfo] = appInfo;  if (ModelState.IsValid == false)  {  //实体验证失败  return View(model);  }  //过滤字段无效字符  model.Trim();  //获取用户信息  var userInfo = _appUserService.Get(model.UserName);  if (userInfo == null)  {  //用户不存在  return View(model);  }  if (userInfo.UserPwd != model.Password.ToMd5())  {  //密码不正确  return View(model);  }  //获取当前未到期的Session  var currentSession = _authSessionService.ExistsByValid(appInfo.AppKey, userInfo.UserName);  if (currentSession == null)  {  //构建Session  currentSession = new UserAuthSession  {  AppKey = appInfo.AppKey,  CreateTime = DateTime.Now,  InvalidTime = DateTime.Now.AddYears(1),  IpAddress = Request.UserHostAddress,  SessionKey = Guid.NewGuid().ToString().ToMd5(),  UserName = userInfo.UserName  };  //创建Session  _authSessionService.Create(currentSession);  }  else  {  //延长有效期,默认一年  _authSessionService.ExtendValid(currentSession.SessionKey);  }  //记录用户授权日志  _userAuthOperateService.Create(new UserAuthOperate  {  CreateTime = DateTime.Now,  IpAddress = Request.UserHostAddress,  Remark = string.Format("{0} 登录 {1} 授权成功", currentSession.UserName, appInfo.Title),  SessionKey = currentSession.SessionKey  }); 104 var redirectUrl = string.Format("{0}?SessionKey={1}&SessionUserName={2}",  appInfo.ReturnUrl, currentSession.SessionKey, userInfo.UserName);  //跳转默认回调页面  return Redirect(redirectUrl);  }  } Memcached会话标识验证核心代码: public class PassportController : ApiController  {  private readonly IUserAuthSessionService _authSessionService = new UserAuthSessionService();  private readonly IUserAuthOperateService _userAuthOperateService = new UserAuthOperateService();  public bool Get(string sessionKey = "", string remark = "")  {  if (_authSessionService.GetCache(sessionKey))  {  _userAuthOperateService.Create(new UserAuthOperate  {  CreateTime = DateTime.Now,  IpAddress = Request.RequestUri.Host,  Remark = string.Format("验证成功-{0}", remark),  SessionKey = sessionKey  });  return true;  }  _userAuthOperateService.Create(new UserAuthOperate  {  CreateTime = DateTime.Now,  IpAddress = Request.RequestUri.Host,  Remark = string.Format("验证失败-{0}", remark),  SessionKey = sessionKey  });  return false;  }  } 

Client授权验证Filters Attribute

 public class SSOAuthAttribute : ActionFilterAttribute  {  public const string SessionKey = "SessionKey";  public const string SessionUserName = "SessionUserName";  public override void OnActionExecuting(ActionExecutingContext filterContext)  {  var cookieSessionkey = "";  var cookieSessionUserName = "";  //SessionKey by QueryString  if (filterContext.HttpContext.Request.QueryString[SessionKey] != null)  {  cookieSessionkey = filterContext.HttpContext.Request.QueryString[SessionKey];  filterContext.HttpContext.Response.Cookies.Add(new HttpCookie(SessionKey, cookieSessionkey));  }  //SessionUserName by QueryString  if (filterContext.HttpContext.Request.QueryString[SessionUserName] != null)  {  cookieSessionUserName = filterContext.HttpContext.Request.QueryString[SessionUserName];  filterContext.HttpContext.Response.Cookies.Add(new HttpCookie(SessionUserName, cookieSessionUserName));  }  //从Cookie读取SessionKey  if (filterContext.HttpContext.Request.Cookies[SessionKey] != null)  {  cookieSessionkey = filterContext.HttpContext.Request.Cookies[SessionKey].Value;  }  //从Cookie读取SessionUserName  if (filterContext.HttpContext.Request.Cookies[SessionUserName] != null)  {  cookieSessionUserName = filterContext.HttpContext.Request.Cookies[SessionUserName].Value;  }  if (string.IsNullOrEmpty(cookieSessionkey) || string.IsNullOrEmpty(cookieSessionUserName))  {  //直接登录  filterContext.Result = SsoLoginResult(cookieSessionUserName);  }  else  {  //验证  if (CheckLogin(cookieSessionkey, filterContext.HttpContext.Request.RawUrl) == false)  {  //会话丢失,跳转到登录页面  filterContext.Result = SsoLoginResult(cookieSessionUserName);  }  }  base.OnActionExecuting(filterContext);  }  public static bool CheckLogin(string sessionKey, string remark = "")  {  var httpClient = new HttpClient  {  BaseAddress = new Uri(ConfigurationManager.AppSettings["SSOPassport"])  };  var requestUri = string.Format("api/Passport?sessionKey={0}&remark={1}", sessionKey, remark);  try  {  var resp = httpClient.GetAsync(requestUri).Result;  resp.EnsureSuccessStatusCode();  return resp.Content.ReadAsAsync<bool>().Result;  }  catch (Exception ex)  {  throw ex;  }  }  private static ActionResult SsoLoginResult(string username)  {  return new RedirectResult(string.Format("{0}/passport?appkey={1}&username={2}",  ConfigurationManager.AppSettings["SSOPassport"],  ConfigurationManager.AppSettings["SSOAppKey"],  username));  }  } 

示例SSO验证特性使用方法:

 [SSOAuth]  public class HomeController : Controller  {  public ActionResult Index()  {  return View();  }  public ActionResult About()  {  ViewBag.Message = "Your application description page.";  return View();  }  public ActionResult Contact()  {  ViewBag.Message = "Your contact page.";  return View();  }  } 

总结:

从草稿示例代码中可以看到代码性能上还有很多优化的地方,还有SSO应用授权登陆页面的用户账号不存在、密码错误等一系列的提示信息等。在业务代码运行基本正确的后期,可以考虑往更多的安全性层面优化,比如启用AppSecret私钥签名验证,IP范围验证,固定会话请求攻击、SSO授权登陆界面的验证码、会话缓存自动重建、SSo服务器、缓存的水平扩展等。

源码地址:http://xiazai.61k.com/201701/yuanma/SmartSSO_61k.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持61阅读。

本文标题:asp.net课程设计-ASP.NET Core环境设置教程(2)
本文地址: http://www.61k.com/1124866.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1