.Net新手☞基础(Cookie、Session等)

mac2022-06-30  65

CSS是Cascading Style Sheets(层叠样式表)样式表摘要:有四种方式可以在HTML文件中使用样式表:1、在<head>区段中使用<link>元素2、在<head>区段的<style>元素标签内使用@import规则3、在文件的<head>区段中插入<style>元素标签4、在HTML标签内加入样式属性

CSS样式的基本语法:  选择器   {     color:#ffffff;     font-family:"Lucida Grande",Verdana,Lucida,Arial,Helvetica,宋体,sans-serif;   }一般选择器有6种:1、普通选择器直接声明某个标签的样式属性,比如:body{  font-family:Verdana;  font-size:9pt;}2、群选择器几个标签样式属性一样时,可以共同调用一个声明,样式之间用“逗号”分隔,比如:input,tr{font-size:9pt;}3、派生选择器可以使用派生选择器给一个标签里的子标签定义样式span strong{   font-style:italic;   font-weight:normal;}4、ID选择器可以单独为某个标签定义样式,比如有一个<div><div id="mydiv">文字</div>然后在样式表里这样定义:#mydiv {background-color:Red;}5、类别选择器在CSS里用一个“点”开头表示类别选择器定义,比如:.10ptWhite{  color:#000000;  font-size:10pt;}在标签中,使用class="类别名"的方法调用,这个方法比较灵活,可以为不同的标签使用相同的CSS,比如:<div class="10ptWhite">文字</div>中,“文字”就以10pt的白色显示。注意:CSS是区分大小写的。6、伪类选择器CSS用4个伪类来定义链接的各种状态,分别是a:link、a:visited、a:hover和a:active,比如:a:link{text-decoration:none;color:#000000;}a:visited{text-decoration:none;color:#0000ff;}a:hover{text-decoration:underline;colo:#ff0000;}a:active{text-decoration:none;color:#000000;}以上语句分别定义了“链接、已访问过的链接、鼠标停在上方时、单击鼠标时”的样式。如果使用这段CSS来定义的话,链接未访问的时候是黑色无下划线;鼠标停在上方时是红色带下划线;单击鼠标时又是黑色无下划线;链接被访问过以后是蓝色无下划线的。  注意:必须按以上顺序写,否则显示可能和预想的不一样。记住它们的顺序是LVHA。7、印刷伪元素使用印刷伪元素,可以对<p>元素的首行和首字指定印刷效果首行伪元素:实现第一行与其他行样式不同。格式为:p:first-line{}例子:p:first-line{font-variant:small-caps;color:blue}将实现将第一行以蓝色与小写字母显示以下样式属性可以应用于首行元素:font、color、background、word-spacing、letter-spacing、text-decoration、vertical-align、text-transform、line-height,以及clear

首字伪元素:首字伪元素用于常见的印刷效果,像是将文章的第一个字改为大写或者放大。格式为:p:first-letter{}例子:p:first-letter{font-size:24;float:left}以下样式属性可以应用于首字元素:font、color、background、text-decoration、vertical-align、text-transform、line-height、margin properties、padding、border、float以及clear8、选择器中的伪元素

如果要想在项目的所有页面上都应用该样式,那就这样做: 在web.config中的<system.web>节下加上句<pages theme="..."/>

本地化和资源---创建多语言网站1、生成本地化资源  执行“工具”----“生成本地化资源”命令即可完成本地化资源的建立。如login.aspx.resx2、创建多语言资源文件  把上面生成的本地化资源复制两份,分别重命名为login.aspx.zh-cn.resx,login.aspx.en-us.resx(命名方法是  页面名.页面类型.语言代号.resx)  其中login.aspx.zh-cn.resx中的语言都要改成英文。3、实现多语言切换  (1)、选择IE浏览器“菜单”---“工具”---“Internet选项”---“常规页”---“语言”。  (2)、单击“添加”---“选择英语(美国)”并单击“确定”。  (3)、把列表“英语(美国)”上移到第一行,单击“确定”。生成本地化资源html语言会出现Culture和UICulture属性。Culture值确定与区域有关的函数,如日期、数字和货币格式等。UICulture值确定为页加载哪些资源。我们可以为整个站点统一应用全球化设置,在Web.config文件的<system.web>中添加如下节点即可。<globalization culture="auto" uiCulture="auto"/>4、以编程方式访问本地资源  public string str  {     get {retuen (string)base.GetLocalResourceObject("newResource.Text");}     set {tb_Username.Text=value;}  }5、创建和使用全局资源  (1)、右键单击项目,选择“添加新项”---“资源文件”,名称这里起Rescource.resx  (2)、打开Rescource.resx文件,任意添加一个字符串资源,这里我们添加名称为GlobalResourceText,值为“欢迎光临本站,竭诚为您服务!”  (3)、在任何页面的任何位置添加一个Label控件,单击Expressions,选择“Text”,表达式类型为Resources。ClassKey中填写全局资源文件的文件名,例如我们创建的文件名为Rescource.resx,这里我们填写Rescource。RescourceKey填写资源ID,这里我们填写GlobalResourceText。  (4)、这样我们就完成了。  (5)、访问全局资源很简单,如下:string s=Rescources.Rescource.GlobalResourceText;

导航控件和站点地图1、为网站建立一个SiteMapPath控件。2、为网站新建一个站点地图文件,保留原来的名字(Web.sitemap)。3、打开Web.sitemap文件,修改如下:<?xml version="1.0" encoding="utf-8"?><siteMap xmlns="http://schmas.micosoft.com/AspNet-File-1.0">  <siteMapNode url="Default.aspx" title="首页" description="显示所有分类和板块">    <siteMapNode url="TopicList.aspx" title="帖子列表" description="显示某一板块的主题帖"></siteMapNode></siteMap>

如果想关联sitemappath和web.siteMap站点地图,可以在Web.config的<system.web>节点添加<siteMap>        <providers>          <add siteMapFile="Web.sitemap" name="Websitemap" type="System.Web.XmlSiteMapProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>        </providers>      </siteMap>然后设置SiteMapProvider,指向前面自定义的SiteMapProvider即可。<asp:SiteMapPath ID="SiteMapPath1" runat="server" SiteMapProvider="Websitemap">        </asp:SiteMapPath>

字符串的操作1、字符访问string s="ABCDE";Console.WriteLine(s[0]);ss//输出"A"Console.WriteLine(s.Length);//输出42、打散string s="ABCDE";char[]arr=s.ToCharArray();//把字符串打散成字符数组Console.WriteLine(arr[0]);//输出A3、截取string s="ABCDE";Console.WriteLine(s.Substring(1));//从第2位开始截取一直到字符串结束,这里输出"BCD"Console.WriteLine(s.Substring(2,2));//从第3位开始截取一直到字符串结束,这里输出"CD"4、字符匹配string s="ABCABCD";Console.Write(s.IndexOf('A'));//从字符串头部开始搜索第一个匹配字符A的位置,输出0Console.Write(s.IndexOf('BCD'));//从字符串头部开始搜索第一个匹配字符BCD的位置,输出4Console.Write(s.LastIndexOf('C'));//从字符串尾部开始搜索第一个匹配字符C的位置,输出5Console.Write(s.LastIndexOf('E'));//从字符串尾部开始搜索第一个匹配字符E的位置,输出-1Console.Write(s.Contains("ABCD"));//判断字符串中是否存在另一个字符串"ABCD",输出TRUE5、大小写转换string s="aBcD";Console.WriteLine(s.ToLower());//转换为小写,输出abcdConsole.WriteLine(s.ToUpper());//转换为大写,输出ABCD6、对齐string s="abcd";Console.WriteLine(s.PadLeft(6,'_'));//使用'_'填充字符串左边,使其扩充到6位,输出__abcdConsole.WriteLine(s.PadRight(6,'_'));//使用'_'填充字符串右边,使其扩充到6位,输出abcd__7、匹配移除string s="__AB__CD__";Console.WriteLine(s.Trim('_'));//移除字符串头部与尾部的'_'字符,输出AB__CDConsole.WriteLine(s.TrimStart('_'));//移除字符串头部的'_'字符,输出AB__CD__Console.WriteLine(s.TrimEnd('_'));//移除字符串尾部的'_'字符,输出__AB__CD8、插入和删除string s="ADEF"Console.WriteLine(s.Insert(1,BC));//输出ABCDERConsole.WriteLine(s.Remove(1,2));//从字符串第1位开始删除2个字符,输出ADEF9、替换string s="A_B_C_D";Console.WriteLine(s.Replace('_','-'));把字符串中的"_"替换为"-",输出A-B-C-D10、分割string s="A,B,C,D";string [] arr=s.Split(',');//以','字符对字符串进行分割,返回字符串数组arr[]={"A","B","C","D"}11、格式化Console.WriteLine(string.Format("{0}+{1}={2}",1,2,1+2));12、连接string s="A,B,C,D";string [] arr=s.Split(',');返回字符串数组arr[]={"A","B","C","D"}Console.WriteLine(string.Concat(arr));//将一个字符串数组连接成一个字符串,输出“ABCD”Console.WriteLine(string.Join(",",arr));//以','作为分割符将一个字符串数组连接成一个字符串,输出“A,B,C,D”StringBuilder sb=new StringBuilder();sb.Append("A");

一、Cookie从技术上讲,Cookie是一小段保存在客户端的数据。用户访问网站的时候,网站会给用户一个包含过期的Cookie,浏览器收到Cookie后就存放在客户端的文件夹下。以后用户每次访问网站页面的时候,浏览器会根据网站的URL在本地Cookie文件夹内查找是否存在当前网站关联的Cookie,如果有的话就连同页面请求一起发送到服务器。关于Cookie的知识应注意一下几点:(1)Cookie只是一段字符串,并不能执行。(2)大多数浏览器规定Cookie大小不能大于4K,每个网站不超过20个Cookie,所有网站的Cookie总和不超过300个。(3)除了Cookie外,几乎没有其他的方法在客户端的机器上写入数据(就连Cookie的写入操作也是浏览器进行的)。当然,连Cookie都可以通过浏览器安全配置来禁止。现在大多数网站都利用Cookie来保存一些数据(比如你的ID),以便你下次能直接“继续”以前的配置,所以建议不要轻易关闭Cookie。   Cookie毕竟是存放客户端的,因此,不要在Cookie中保存保密信息。    Cookie的相关操作    /// <summary>    /// Cookie Operate    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    ///Save Cookie    protected void SaveCookie_Click(object sender, EventArgs e)    {        HttpCookie SingleValueCookie = new HttpCookie("test1");        SingleValueCookie.Value="单值Cookie";        SingleValueCookie.Expires = DateTime.Now.AddDays(1);        Response.Cookies.Add(SingleValueCookie );        HttpCookie MultiValueCookie = new HttpCookie("test2");        MultiValueCookie.Values["key1"] = "value1";        MultiValueCookie.Values["key2"] = "value2";        MultiValueCookie.Expires = DateTime.Now.AddDays(1);        Response.Cookies.Add(MultiValueCookie );    }    //MultiValue Cookie    protected void MultiValueCookie_Click(object sender, EventArgs e)    {        HttpCookie SingleValueCookie=Request.Cookies["test1"];        SingleValueCookie.Value = "修改后的单值Cookie";        Response.Cookies.Add(SingleValueCookie );    }    //Read Cookie    protected void ReadCookie_Click(object sender, EventArgs e)    {        HttpCookie SingleValueCookie = Request.Cookies["test1"];        if(SingleValueCookie!=null )        {            Response.Write(string.Format("key:{0}Value:{1}<br/>","test1",SingleValueCookie.Value,SingleValueCookie.Expires ));        }        HttpCookie MultiValueCookie=Request.Cookies["test2"];        if(MultiValueCookie!=null )        {            Response.Write(string.Format("Key:{0}Value:{1}<br/>","test2",MultiValueCookie.Value));            foreach(string  subkey in MultiValueCookie.Values.AllKeys )            {                Response.Write(string.Format("SubKey:{0}Value:{1}Expiress:{2}<br/>",subkey,MultiValueCookie.Values[subkey],MultiValueCookie.Expires ));                         }        }    }    ///<summary>    ///Delete Cookie    ///1、从Request对象中获取Cookie 2、把Cookie的过期时间设置为过去的时间 3、把Cookie重新写回Response中    ///</summary>    protected void DeleteCookie_Click(object sender, EventArgs e)    {        foreach (string key in Request.Cookies.AllKeys)        {            HttpCookie cookie=Request.Cookies[key];            cookie.Expires = DateTime.MinValue;            Response.Cookies.Add(cookie );        }    }

二、application与session的区别   application 是在不同的电脑上访问同一个网站,都是对同一个变量进行操作。   session 是在不同的电脑上访问的同一个网站,但控制的都是针对自己电脑的变量。   ASP.NET提供存储SessionID的模式:1、Cookie(默认)。如果客户端禁止了Cookie的使用,Session也将失效。2、URL。Cookie是否开启并不影响Session的使用,缺点是不能使用绝对链接。    ASP.NET提供存储Session内容的模式:1、InProc(默认)。Session存储在IIS进程中(Web服务器内存)。2、StateServer。Session存储在独立的Windows服务进程中(可以不是Web服务器)。3、SqlServer。Session存储在SqlServer数据库的表中(SqlServer服务器)。     把Session存储在独立的进程中步骤:第一步:打开状态服务。依次打开“控制面板”--“管理工具”--“服务”命令,找到ASP.NET状态服务一项,右键单击服务选择启动。  如果决定使用状态服务存储Session,别忘记修改服务为自启动,以免忘记启动服务而造成网站Session不能使用。  服务正常启动后可以观察任务管理器,其中的aspnet_state.exe进程就是状态服务进程。第二步:在system.web节点写入:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeOut="20"></sessionState>第三步:可序化和反序列化。可序化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称转换成字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。要使一个类可序化,最简单的方法是使用Serializable属性对它进行标记。例如:[Serializable]class MyUser{  public string sUserName;  public string ToString()  {}}

      把Session存储在数据库中1、在命令提示窗口输入cmd,并在命令行中运行如下命令:C:\Windows\microsoft.net\framework\v2.0.50727\aspnet_regsql.exe -S  .\SqlExpress -E -ssadd其中-S指定SqlServer服务器地址,-E表示采用信任连接,-ssadd表示为SqlServer服务器添加状态服务的支持。操作结束后,可以看到数据库中多了一个ASPState数据库2、打开Web.config,写入下面代码:<sessionState mode="SQLServer" sqlConnectionString="sever=(local);Trusted_Connection=True" sqlCommandTimeOut="60"></sessionState>3:可序化和反序列化。

session的使用范围:使用同一个客户端(浏览器实例)访问同一个应用程序的所有页面。

session的大小限制:  如果使用InPro模式的session,存储过多的数据会导致IIS进程被收回,引发session不断丢失。  如果使用StateServer存储session,那么数据在存入session以前需要进行序列化,序列化会消耗大量的CPU资源。  如果使用SqlServer模式的session,数据不但要序列化而且还有存储在硬盘上,更不适合存储大量的数据。

session的生命周期session采用一种平滑超时技术来控制何时销毁session。默认情况下,session的超时时间是20分钟,用户保持20分钟不访问网站,则session被收回;如果在这20分钟内用户又访问了网站,那么20分钟就重新计时。这个超时时间可以通过Web.config来修改:<sessionState timeout="30"></sessionState>或者在程序中设置:Session.Timeout="30";  session是否存在,不仅仅依赖TimeOut属性,下面的情况都能引起session丢失:1、bin目录中的文件被修改。2、SessionID丢失或无效。3、如果使用InPro模式的session,那么IIS重启将会丢失session。如果使用StateServer存储session,服务器重新启动session也丢失。从安全性角度考虑,建议不要使用cookieless和SqlServer模式的session。

遍历与销毁Session遍历session集合System.Collections.IEnumerator SessionEnum=Session.Keys.GetEnumerator();while(SessionEnum.MoveNext()){  Response.Write(Session[SessionEnum.Current.ToString()].ToString()+"<br/>");}如果仅仅是为了监视session,也可以通过trace来获得详细信息,在Web.config的system.web节点添加:<trace enable="true" pageOutput="true"/>

销毁sessionSession.Abandon();

Application全局应用程序类在服务器内存中存储数量较少又独立于用户请求的数据。由于它的访问速度非常的快,而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。  右键单击网站,选择“添加新项”命令,选择全局应用程序类。application与session的用法差不多。唯一要注意的是,application的作用范围是整个应用程序,可能有很多用户在同一时间访问application造成混乱,因此在修改application时要先锁定application,修改完成后再解锁。代码如下:Application.Lock();Application的相关操作Application.UnLock();

Cache概述Cache中提供的缓存过期策略:1、永不过期。和Application一样,缓存永不过期。2、绝对时间过期。缓存在某一时间过期,比如5分钟。3、变化时间过期(平滑过期)。缓存在某一时间内未访问则过期。4、依赖过期。缓存依赖于数据库中的数据或者文件中的内容。一旦数据库中某些表的数据发生变化或者文件内容发生变动,则缓存自动过期。   缓存过期后我们就要更新缓存,ASP.NET提供两种更新策略。1、被动更新。缓存过期后手动进行更新。2、主动更新。缓存过期后在回调方法中更新。

using System.Diagnostics;//用于精确测定时间间隔using System.Web.Caching;//用于缓存的策略

Stopwatch sw=new Stopwatch();sw.Start();sw.ElapsedTicks//Stopwatch类用于精确测定逝去的时间,ElapsedTicks属性返回了时间间隔的计数器刻度,即系统的计数器走过了多少次。

DataSet ds=new DataSet();Cache.Insert("Data",ds);//永不过期

DataSet ds=new DataSet();Cache.Insert("Data",ds,null,DataTime.Now.AddSeconds(10),TimeSpan.Zero);//绝对时间过期DataTime.Now.AddSeconds(10)表示缓存10秒后过期,TimeSpan.Zero表示不使用平滑过期策略。

DataSet ds=new DataSet();Cache.Insert("Data",ds,null,DataTime.MaxValue,TimeSpan.FromSeconds(10));//变化时间过期(平滑过期)。DataTime.MaxValue表示不使用绝对时间过期策略,TimeSpan.FromSeconds(10)表示缓存连续10秒没人访问就过期。

在这里,我们都使用Insert()方法来添加缓存。其实,Cache还有一个方法Add()方法也能向缓存中添加项。不同之处在于Add()方法只能添加缓存中没有的项,如果添加缓存中已有的项将失败(但不抛出异常),而Insert()方法能覆盖原来的项。

注意,和application不同,这里不需要使用在插入缓存的时候进行锁操作,Cache会自己处理并发。

缓存的回调功能让缓存过期后自动续建实现自动更新。Cache.Insert("Data",ds,null,DataTime.Now.AddSeconds(10),TimeSpan.Zero,CacheItemPriority.Default,CacheRemovedCallback)

移除缓存:Cache.Remove("Data");

以人为本的Profile可以使用Profile制作个性化页面   <!--设置Profile-->      <anonymousIdentification enabled="true"/>      <profile automaticSaveEnabled="true ">        <properties>          <group name="UI">            <add name="ForeColor" defaultValue="Black" allowAnonymous="true " type="string"/>            <add name="EnableBold" defaultValue="fale" allowAnonymous="true " type="bool"/>          </group>        </properties>       </profile>

说明:1、<anonymousIdentification enabled="true"/>表示对匿名用户也启用Profile,系统会给匿名用户分配一个随机字符串组成的ID。2、<profile automaticSaveEnabled="true ">表示自动在页面请求结束的时候保存Profile的设置到数据库中。3、<properties>就是正式定义Profile的格式了,在每一个<group>中的才是真正的Profile。name表示Profile的名字,defaultValue表示默认值,allowAnonymous表示匿名用户是否可以使用,type表示数据类型。

调用Profile的方法是:Profile.UI.ForeColor=ddl_TextColor.SelectedValue;Profile.UI.EnableBlod=cb_IsBlod.Checked;

Profile总结1、存储物理位置:客户端Cookie/URL和服务器数据库2、存储类型限制:可序列化类型3、状态使用范围:当前请求的上下文。对每个用户独立4、存储大小限制:任意大小,读取写入频繁的数据不建议存入Profile5、生命周期:    与关联的Cookie的生命周期一样6、安全与性能:  数据总是存储在服务器端,安全性比较高,但不易存储过多数据。7、优缺点与注意事项:可以方便的保存用户(匿名用户和已登录用户)的设置。

其他QueryString在很多时候我们希望跨页面传输数据,最常用的方法是使用GET方法提交数据。也就是在URL中附加一段QUERYSTRING(类似news.aspx?ID=1这样的效果),因此,有的时候我们不需要通过程序就能传输QUERYSTRING。不过,应注意一下几点:1、IE浏览器对URL长度限制在2083个字符内。由于QUERYTRING是在URL中传输的,所以也受到了限制。2、在URL中传输的数据都是明文的,而且客户端随时可以更改,因此,不要传输敏感数据。3、在URL中传汉字或者一些特殊字符需要进行URL编码后传递,接受的时候再反编码,否则传递的数据可能出现乱码或者被截取。string s="编程快乐!@#$%&*()";Response.Redirect(Request.Url.AbsolutePath+"?data="+HttpUtility.UrlEncode(s));接受的时候:if(Request.QueryString["data"]!=null)Response.Write(HttpUtility.UrlDecode(Request.QueryString["data"]));

强类型DataSet1、单击右键,选择“添加新项”--“数据集”,并改名为GuestBook2、在"TableAdapter配置向导"对话框选择一个数据连接,一直单击下一步,到完成。ASP.NET不仅为我们生成强类型数据集,而且还能自动根据输入的select查询语句生成一系列CRUD操作方法:1、填充DataTable。把数据填充到传入的DataTable中2、返回DataTable。返回包含数据的DataTable。3、插入修改和删除操作。直接对单个行进行插入、更新和删除操作。程序如下: GuestBookTableAdapters.tbGuestBookTableAdapter top = new GuestBookTableAdapters.tbGuestBookTableAdapter();        top.Insert(Guid.NewGuid(), tb_UserName.Text, DateTime.Now, tb_Message.Text, false ,"Good");        ClientScript.RegisterStartupScript(this.GetType(),"","<script>alert('发表成功')</script>");

请求上下文防图片盗链、防文件下载及IP黑名单   通过HttpHandler和HttpModule,能在一个更高的层次来控制请求。在.NET中将几个内置对象和其他几个与上下文有关的对象捆绑在一起,形成一个内部多项HttpContext,来跟踪HTTP请求的上下文。HttpContext中几个比较重要的内置对象1、Applilcation2、ApplilcationInstance3、Cache4、Session5、Request6、Response7、Server8、Trace9、User10、Profile

HttpHandler配置IIS在IIS中新建一个虚拟目录,然后指向我们的程序集。右键单击虚拟目录,选择属性,会看到“虚拟目录选项卡”选项卡,选择“虚拟目录”选项卡,选择“配置”,将弹出“应用程序配置窗口”,单击“添加”,跳出“添加/编辑应用程序扩展名映射”窗口,在“可执行文件”后输出:“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”在“扩展名”后输人:.jpg,单击确定。利用同样的方法注册.gif、.png等。这样设置的这些指定的图片扩展名就由我们的应用程序来处理了。

ASP.NET安全机制安全相关的名词:1、身份验证。许多Web应用程序的一个重要部分是能够识别用户和控制对资源的访问。确定请求实体的标识的行为称为身份验证。通常,用户必须提供凭证(如名称/密码对)才能进行身份验证。2、授权。一旦经过身份验证的标志可用,就必须确定该标志是否可以访问给定的资源,此过程称为授权。ASP.NET与IIS一起使用为应用程序提供身份验证和授权服务。3、模拟。在默认情况下,ASP.NET使用本地系统账号的权限执行(而不是请求的用户),使用模拟后,ASP.NET应用程序可以用发出请求的用户的Windows标志(用户账户)执行。4、基于角色的安全性。对于一个庞大的用户系统,我们不能为每一个用户都单独授权,如果把用户分成不同的角色,然后对角色进行授权,那么这个工作就简单了。

转载于:https://www.cnblogs.com/Mygirl/archive/2011/06/30/2094827.html

最新回复(0)