仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 870|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之在ASP.NET中创立平安的web站点(设置)...

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:49:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。asp.net|web|平安|创立|站点之前用ASP,PHP,JSP编写网站代码的时分,站点平安性老是一件头疼的事变,固然我们编写了用户登录,注册,考证页面,可是效果老是不睬想。偶然候我们不能不用大批的session变量来寄存相干信息,到处设防。而在.NET情况下,这个成绩处置起来就十分简单了。关头是要充实了解web.config文件。起首,先容一下web.config文件。
<?xmlversion="1.0"encoding="utf-8"?>
<configuration>
<system.web>
<!--静态调试编译
设置compilationdebug="true"以将调试标记(.pdb信息)
拔出到编译页中。由于这将创立实行起来
较慢的年夜文件,以是应当只在调试时将该值设置为true,而一切其他时分都设置为
false。有关更多信息,请参考有关
调试ASP.NET文件的文档。
-->
<compilationdefaultLanguage="vb"debug="true"/>
<!--自界说毛病信息
设置customErrorsmode="On"或"RemoteOnly"以启用自界说毛病信息,或设置为"Off"以禁用自界说毛病信息。
为每一个要处置的毛病增加<error>标志。
-->
<customErrorsmode="RemoteOnly"/>
<!--身份考证
此节设置使用程序的身份考证战略。大概的形式是“Windows”、
“Forms”、“Passport”和“None”
-->
<authenticationmode="Windows"/>

<!--受权
此节设置使用程序的受权战略。能够同意或回绝用户或脚色会见
使用程序资本。通配符:"*"暗示任何人,"?"暗示匿名
(未受权的)用户。
-->
<authorization>
<allowusers="*"/><!--同意一切用户-->
<!--<allowusers="[逗号分开的用户列表]"
roles="[逗号分开的脚色列表]"/>
<denyusers="[逗号分开的用户列表]"
roles="[逗号分开的脚色列表]"/>
-->
</authorization>
<!--使用程序级别跟踪纪录
使用程序级别跟踪在使用程序内为每页启用跟踪日记输入。
设置traceenabled="true"以启用使用程序跟踪纪录。假如pageOutput="true",则
跟踪信息将显现在每页的底部。不然,能够经由过程从Web使用程序
根扫瞄"trace.axd"页来检察
使用程序跟踪日记。
-->
<traceenabled="false"requestLimit="10"pageOutput="false"traceMode="SortByTime"localOnly="true"/>

<!--会话形态设置
默许情形下,ASP.NET利用cookie标识哪些哀求属于特定的会话。
假如cookie不成用,则能够经由过程将会话标识符增加到URL来跟踪会话。
若要禁用cookie,请设置sessionStatecookieless="true"。
-->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="false"
timeout="20"
/>
<!--环球化
此节设置使用程序的环球化设置。
-->
<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>
</system.web>
</configuration>
好了,信任看过下面的先容今后,对web.config文件必定十分懂得了吧。上面我们就切进主题。为了避免用户没有经由考证就会见站点,我们的处置办法是当用户没有经由过程考证的时分点击任何页面将会间接跳到Login.aspx页面,详细代码以下:
<authenticationmode="Forms">
<formsname="yourAuthCookie"loginUrl="login.aspx"
protection="All"path="/"/>
</authentication>
<authorization>
<denyusers="?"/>
</authorization>
可是如许会发生一个成绩,那就是假如我的站点有一些信息是可让恣意用户随便会见的,好比站点简介,利用申明等。假如依照下面的处置办法岂不让用户以为很贫苦,呵呵,不急,在ASP.NET中天然有响应的办理举措。上面的代码能够完成匿名用户会见Test.aspx页面:
<locationpath="test.aspx">
<system.web>
<authorization>
<allowusers="?"/>
</authorization>
</system.web>
</location>
办理了下面两个成绩,信任人人内心必定有底了吧。上面就入手下手完成login.aspx页面。使用C#和SQLServer2000,创立一个webform页面,到场响应的控件。详细代码以下:
<%@Pagelanguage="c#"Codebehind="login.aspx.cs"
AutoEventWireup="false"Inherits="secure.login"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>SecureSite</title>
<metacontent="MicrosoftVisualStudio7.0"name="GENERATOR">
<metacontent="C#"name="CODE_LANGUAGE">
<metacontent="javascript"name="vs_defaultClientScript">
<metacontent="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="login"method="post"runat="server">
<tablecellSpacing="0"cellPadding="0"border="0">
<tr>
<tdvAlign="top"align="left">
<asp:labelid="Message"Runat="server"ForeColor="#ff0000">
</asp:label>
</td>
</tr>
<tr>
<tdvAlign="top"align="left">
<b>E-mail:</b>
</td>
</tr>
<tr>
<tdvAlign="top"align="left">
<asp:textboxid="username"Runat="server"Width="120">
</asp:textbox>
</td>
</tr>
<tr>
<tdvAlign="top"align="left">
<b>Password:</b>
</td>
</tr>
<tr>
<tdvAlign="top"align="left">
<asp:textboxid="password"Runat="server"
Width="120"TextMode="Password">
</asp:textbox>
</td>
</tr>
<tr>
<tdvAlign="top"align="left">
<asp:checkboxid="saveLogin"Runat="server"
Text="<b>Savemylogin</b>">
</asp:checkbox>
</td>
</tr>
<tr>
<tdvAlign="top"align="right">
<asp:imagebuttonid="btnLogin"Runat="server"
ImageUrl="/images/w2k/login/btnLogin.gif">
</asp:imagebutton>
</td>
</tr>
</table>
</form>
</body>
</HTML>

界面做好以后,就入手下手编写提交按钮事务,起首必要注册该事务,代码以下:
privatevoidInitializeComponent()
{
this.btnLogin.Click+=newSystem.Web.UI.ImageClickEventHandler(this.btnLogin_Click);
.
.
.
}
事务注册好以后,天然就是编写事务处置函数了:
privatevoidbtnLogin_Click(objectsender,System.Web.UI.ImageClickEventArgse)
{
CCommonDBsql=newCCommonDB();
stringredirect="";
if((redirect=sql.AuthenticateUser(this.Session,this.Response,
username.Text,password.Text,saveLogin.Checked))!=string.Empty)
{
//Redirecttheuser
Response.Redirect(redirect);
}
else
{
Message.Text="LoginFailed!";
}
}
读者看完下面的代码以后必定想问CCommonDB是那里来的东东,这是我编写的一个类,用来处置用户登录信息的,假如乐成则把相干信息写进session、Cookie和SQL数据库,同时跳到default.aspx页面。详细以下:
CCommonDB.cs
namespacesecure.Components
{
publicclassCCommonDB:CSql
{
publicCCommonDB():base(){}
publicstringAuthenticateUser(
System.Web.SessionState.HttpSessionStateobjSession,//SessionVariable
System.Web.HttpResponseobjResponse,//ResponseVariable
stringemail,//Login
stringpassword,//Password
boolbPersist//Persistlogin
)
{
intnLoginID=0;
intnLoginType=0;
//Logtheuserin
Login(email,password,refnLoginID,refnLoginType);
if(nLoginID!=0)//Success
{
//Logtheuserin
System.Web.Security.FormsAuthentication.SetAuthCookie(nLoginID.ToString(),bPersist);
//Setthesessionvaraibles
objSession["loginID"]=nLoginID.ToString();
objSession["loginType"]=nLoginType.ToString();
//Setcookieinformationincasetheymadeitpersistant
System.Web.HttpCookiewrapperCookie=newSystem.Web.HttpCookie("wrapper");
wrapperCookie.Value=objSession["wrapper"].ToString();
wrapperCookie.Expires=DateTime.Now.AddDays(30);
System.Web.HttpCookielgnTypeCookie=newSystem.Web.HttpCookie("loginType");
lgnTypeCookie.Value=objSession["loginType"].ToString();
lgnTypeCookie.Expires=DateTime.Now.AddDays(30);
//Addthecookietotheresponse
objResponse.Cookies.Add(wrapperCookie);
objResponse.Cookies.Add(lgnTypeCookie);
return"/candidate/default.aspx";
}
case1://AdminLogin
{
return"/admin/default.aspx";
}
case2://ReportingLogin
{
return"/reports/default.aspx";
}
default:
{
returnstring.Empty;
}
}
}
else
{
returnstring.Empty;
}
}
///<summary>
///Verifiestheloginandpasswordthatweregiven
///</summary>
///<paramname="email">thelogin</param>
///<paramname="password">thepassword</param>
///<paramname="nLoginID">returnstheloginid</param>
///<paramname="nLoginType">returnsthelogintype</param>
publicvoidLogin(stringemail,stringpassword,refintnLoginID,refintnLoginType)
{
ResetSql();
DataSetds=newDataSet();
//Setourparameters
SqlParameterparamLogin=newSqlParameter("@username",SqlDbType.VarChar,100);
paramLogin.Value=email;
SqlParameterparamPassword=newSqlParameter("@password",SqlDbType.VarChar,20);
paramPassword.Value=password;

Command.CommandType=CommandType.StoredProcedure;
Command.CommandText="glbl_Login";
Command.Parameters.Add(paramLogin);
Command.Parameters.Add(paramPassword);
Adapter.TableMappings.Add("Table","Login");
Adapter.SelectCommand=Command;
Adapter.Fill(ds);
if(ds.Tables.Count!=0)
{
DataRowrow=ds.Tables[0].Rows[0];
//Gettheloginidandthelogintype
nLoginID=Convert.ToInt32(row["Login_ID"].ToString());
nLoginType=Convert.ToInt32(row["Login_Type"].ToString());
}
else
{
nLoginID=0;
nLoginType=0;
}
}
}
abstractpublicclassCSql
{
privateSqlConnectionsqlConnection;//Connectionstring
privateSqlCommandsqlCommand;//Command
privateSqlDataAdaptersqlDataAdapter;//DataAdapter
privateDataSetsqlDataSet;//DataSet
publicCSql()
{
sqlConnection=newSqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
sqlCommand=newSqlCommand();
sqlDataAdapter=newSqlDataAdapter();
sqlDataSet=newDataSet();
sqlCommand.Connection=sqlConnection;
}
///<summary>
///Accesstooursqlcommand
///</summary>
protectedSqlCommandCommand
{
get{returnsqlCommand;}
}
///<summary>
///Accesstoourdataadapter
///</summary>
protectedSqlDataAdapterAdapter
{
get{returnsqlDataAdapter;}
}
///<summary>
///Makessurethateverythingisclearandreadyforanewquery
///</summary>
protectedvoidResetSql()
{
if(sqlCommand!=null)
{
sqlCommand=newSqlCommand();
sqlCommand.Connection=sqlConnection;
}
if(sqlDataAdapter!=null)
sqlDataAdapter=newSqlDataAdapter();
if(sqlDataSet!=null)
sqlDataSet=newDataSet();
}
///<summary>
///Runsourcommandandreturnsthedataset
///</summary>
///<returns>thedataset</returns>
protectedDataSetRunQuery()
{
sqlDataAdapter.SelectCommand=Command;
sqlConnection.Open();
sqlConnection.Close();
sqlDataAdapter.Fill(sqlDataSet);
returnsqlDataSet;
}
}
}
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!
若天明 该用户已被删除
沙发
发表于 2015-1-20 05:10:08 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
小魔女 该用户已被删除
板凳
发表于 2015-1-28 09:23:49 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
精灵巫婆 该用户已被删除
地板
发表于 2015-2-5 14:24:02 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-12 04:37:51 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
分手快乐 该用户已被删除
6#
发表于 2015-3-2 22:21:12 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
飘灵儿 该用户已被删除
7#
发表于 2015-3-11 07:01:34 | 只看该作者
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
再现理想 该用户已被删除
8#
发表于 2015-3-17 23:07:49 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
爱飞 该用户已被删除
9#
发表于 2015-3-25 05:32:42 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表