session站点计数器

ASP.net实验四第二题:

如图所示,使用Session对象设计一个站点计数器,要求将来访人数存放在站点内的counter.txt文件内,该数字不会因服务器或网站重新启动而丢失,刷新页面也不会引起数字变化,程序运行时要求将当前会话的ID值显示到页面中。
session站点计数器_第1张图片
做题思路:因为这道题中没有说要用Application,所以一开始也不太敢用全局应用程序类。大家首先要弄明白session和application的区别。这个在下面会详细说到。主要的思路是,将每一个访问者,也就是每一个session都存入counter.txt文件中,对counter.txt文件中的数字加一。之前尝试过另外一种方法,但是始终无法找到一个合适的方法把counter.txt文件中的内容读出来,然后在它的基础上加一。直到遇到了system.IO(大家不要纠结大小写)。
代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class 实验4第2题 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //string FilePath = Server.MapPath("counter.txt");
        string FilePath = "D:/学习/ASP.net/03soft/file/counter.txt";
        StreamReader sr = new StreamReader(FilePath);
        int count = int.Parse(sr.ReadLine());
        sr.Close();
        if (Session["counter"] == null)
        {
            Session["counter"] = "";
            count = count + 1;
            StreamWriter sw = new StreamWriter(FilePath);
            sw.WriteLine(count);
            sw.Close();
            Response.Write("当前sessionID为:" + Session.SessionID);

            Response.Write("
你是第" + count.ToString() + "位访问者"); } } }

解析:

System.IO命名空间简介。

System.IO 命名空间的主要目的是为了提供方便访问操作系统的文件和目录类型,另外,也提供写内存和网络流的方法。

类型 说明
File 该类是对文件的典型的操作。该类提供用于创建、复制、删除、移动和打开文件的静态方法,File类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。也可将File类用于获取和设置文件属性的DataTime信息,或者有关文件创建、访问和写入等操作的DateTime信息
StreamReader 该类实现了一个TextReader,使其以一种特定的编码从字节流中读取字符。StreamReader类以一种特定的编码输入字符,而Stream类用于字节的输入输出。使用StreamReader读取标准文本文件的各行信息。
Directory 该类公开用于创建、移动和枚举目录和子目录的静态方法。无法继承此类。Directory类的典型操作是:复制、移动、重命名、创建和删除目录。也可将Directory类用于获取和设置与目录的创建、访问、写入等操作相关的DataTime信息。
DirectoryInfo 该类公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类。DirectoryInfo类的典型操作是:复制、移动、重命名、创建和删除目录。
FileStream 该类公开以文件为住的Stream,既支持同步读写操作,也支持异步读写操作。使用FileStream类对文件系统上的文件进行读取、写入、打开、和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream对输入输出进行缓冲,从而提高性能。
FileInfo 该类提供创建、移动、复制、删除和打开文件的实例方法,并且帮助创建FileStream对象
StreamWriter 该类提供创建、移动、复制、删除和打开文件的实例方法,并且帮助创建FileStream对象。FileInfo类的典型操作是:复制、移动、重命名、创建、打开、删除和追加到文件。而StreamWriter类以一种特定的编码向流中写入字符。StreamWriter类也是以一种特定的编码输入字符,而从Stream派生的类则用于自己的输入和输出。

session和application的区别:

session
  1. Session 用于保存每个用户的专用信息。
  2. ASP.NET 会话状态将来自限定时间范围内的同一浏览器的请求标识为一个会话,当每个用户首次与这台服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。Session提供用于在该会话持续期间内保留变量值的方法。默认情况下,将为所有 ASP.NET 应用程序启用ASP.NET 会话状态. 会话变量可以是任何有效的 .NET Framework 类型。 注意:当使用 InProc 以外的会话状态模式时,会话变量类型必须为基元 .NET 类型或可序列化的类型 。
  3. Session信息存储在服务器端,而SessionID存储在客户端。 默认情况下,SessionID 值存储在 Cookie 中。但也可以将应用程序配置为在“无 Cookie”会话的 URL 中存储 SessionID 值。
  4. 生命周期:它的生存期是用户持续请求时间再加上一段时间(可以在web.config中设置,默认是20分钟)。
Application

1、Application用于保存所有用户的公共的数据信息。如果被保存的数据在应用程序生存期内根本不会改变或很少改变,则适用它。
2、Application对象在服务器端运行期间持久的保存数据。其生命周期止于关闭IIS或者使用Clear方法清除

补充:在全局应用程序类里,对session start和session end→打开浏览器就是打开会话会触发session start。会话结束时触发end,并不是关闭浏览器就关闭会话

代码解析:

 string FilePath = "D:/学习/ASP.net/03soft/file/counter.txt";//文件所在位置
 StreamReader sr = new StreamReader(FilePath);//从该位置读取标准文本文件的各行信息
  int count = int.Parse(sr.ReadLine());

StreamReader 的ReadLine方法
1.ReadLine()
当遇到\n \r 或者是\r\n的时候 此方法返回这前面的字符串,然后内部的指针往后移一位下次从新的地方开始读,直到遇到数据的结尾处返回null,所以经常这样使用
String content;
using(StreamReader sr = new StreamReader(“test.txt”))
{
content=sr.ReadLine();
while(null != content)
{
content=sr.ReadLine();
}
sr.Close();

}

 StreamWriter sw = new StreamWriter(FilePath);
            sw.WriteLine(count);

StreamWriter有异曲同工之妙。只不过作用与StreamReader相反。

彩色看着更好看
session站点计数器_第2张图片

你可能感兴趣的:(ASP.net,session)