|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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#的初学者在这里呼唤着! |
|