一个保存数据的方法(可以切换存放的位置,可以设置密钥)

本文探讨了在ASP.NET中如何在不同存储方式(如cookies、ViewState、Session、Cache、application)间快速切换保存数据,并着重解决了数据安全性问题。作者提出创建一个独立的数据保存类,支持加密并可自定义密钥,适用于敏感数据的存储。该类还解决了隐藏域操作和自动保存、加载的挑战,为分页控件QuickPager提供了更安全的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

      在asp.net里面一般的生命周期都比较短,如果想要比较长久的保存数据的话,一般有选择几种方式可供选择,即cookiesViewStateSessionCacheapplication等。他们各有优缺点,也各有其自己的使用范围。

 

      我现在遇到了两个问题,第一个是如何在这几种方式里面快速、方便的切换,第二个是如何实现一个既可以区分用户,又可以区分页面,又节省服务器的资源,又比较安全的保存数据的方式。

 

      ViewState比较符合第二个问题的要求,但是他不太安全,表面上看他存放在客户端的是乱码,其实是可以解密的,解密之后就是明文了,你存放的是什么就一目了然。如果是使用ViewState保存一般的数据倒也是没有什么问题,但是我想保存的是表名、字段名、SQL语句这样的很敏感的数据,这样的数据放在ViewState里面,估计会被人骂死,呵呵。

 

      以前的QuickPager分页控件确实是这么处理的,现在越想越不安全,自己用用也就凑合了,如果推广的话,那就害人了。所以我不得不想办法来解决这个很严重的问题。于是我想写一个独立的能够保存数据的类。这个类可以使用各种方式来存放数据,如果要加密数据的话,也可以自己设置密钥,这样不知道密钥的话,就不能解密了(除非暴力破解),当然您也可以选择不加密(保存在SessionCache就不用加密了),也可以选择不保存。

 

      这样这个类就很灵活了,使用范围也可以广泛一点。

 

      在实现这个函数的时候,遇到了两大难题,一个是如何操作隐藏域,另一个是如何“自动”保存和“自动”加载。ViewState可是不用单独调用SaveViewState()来保存数据的。

 

      在Class里面操作cookieSession等还是比较容易的(System.Web.HttpContext.Current.Response.Cookies[ClientID]),可是如何控制隐藏域呢?想了好久也没有想到好的方法,只好用笨方法了——传递一个Page实例(System.Web.UI.Page)进来,然后使用Page.ClientScript.RegisterHiddenField(ClientID, myData) 来搞定。

 

      至于自动保存,也是采用了一个笨笨的方法,既然已经把Page传递进来了,那么就给他加一个事件吧,_page.PreRender += new EventHandler(MyPage_PreRender);在执行Render之前保存数据。我想用类似的思路来搞定自动加载数据的(_page.PreLoad += new EventHandler(MyPage_PreLoad);),但是遇到了一个小问题。我们一般都是习惯在Page_Load函数里面给属性赋值,但是我要加的事件却是在Page_Load之前执行,也就是说如果在Page_Load里面赋值的话,即使把事件加上了,那么也早已经失去了执行的机会。当然可以在OnInit里面给属性赋值,只是这么做不太符合习惯。

 

      我也研究了一下IStateManager 这个接口,也试了一下,可惜没有成功,也许是我功力不够的原因吧。

 

      Ps:这个难题解决之后,QuickPager分页控件就可以一份为二了,变成QuickPager_UIQuickPager_SQL两个部分,再加上我的数据访问函数库和现实数据的控件,就是一套完整的分页解决方案了。

 

      QuickPager_SQL就是专门处理分页算法(也就是分页用的SQL语句)的,这些部分都可以独立使用,也可以替换成其他的控件、类库。

 

      下面是源码,源文件等整理之后和分页控件一起发送。

 

 

 

namespace JYK.Common
{
    
枚举enum SaveViewStateLocation

    
public class MyViewState        //: IStateManager
    {
        
成员

        
public MyViewState()
        
{
            
//默认设置为不保存
            SaveLocation = SaveViewStateLocation.NoSave;
        }


      
        
属性

        
用于自动加载和保存数据的事件


        
函数

      
    }

}

 

### 如何在 Windows 上生成 SSH 密钥 为了实现基于密钥的身份验证并安全地连接到远程服务器,在 Windows 平台上可以通过以下方法生成 SSH 密钥。 #### 检查现有 SSH 密钥是否存在 首先,确认当前系统中是否已经存在 SSH 密钥。通常情况下,这些密钥存储在 `C:\Users\<您的用户名>\.ssh` 文件夹下。如果该目录中有名为 `id_rsa` 和 `id_rsa.pub` 的文件,则说明已有可用的私钥和公钥组合[^3]。 #### 创建新的 SSH 密钥 当未找到现成的密钥时,需手动创建一对新密钥1. **启动 Git Bash 或 PowerShell** 如果已安装 Git for Windows,推荐使用其自带的 Git Bash 工具;或者也可以直接利用 Windows 自带的 PowerShell 来完成此过程。 2. **运行命令生成密钥对** 执行如下指令以生成一个新的 RSA 类型密钥(也可替换为 Ed25519 提高安全性),同时指定邮箱作为标签以便识别: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 此处 `-t rsa` 表明采用的是RSA算法,而参数 `-b 4096` 则定义了密钥长度为4096位,从而增强加密强度。 3. **设置保存路径与密码保护** 系统会询问希望将生成的密钥存放在哪里,默认位置即上述提到的 `.ssh` 路径。接着还会提示设定一个访问此私人密钥所需的通行短语(passphrase),这一步虽可省略但强烈建议填写以增加额外一层防护措施。 #### 验证生成结果 成功执行以上步骤之后,应该可以在目标目录看到两个新增加的文件——一个是秘密部分(`id_rsa`),另一个则是公开版本(`id_rsa.pub`)。其中后者需要复制粘贴至打算登录的目标机器上的授权钥匙列表里去启用无密码认证功能。 ```powershell cat ~/.ssh/id_rsa.pub ``` 这段代码能够显示刚刚制作出来的公共密钥内容,便于后续将其添加进远端系统的相应配置当中。 --- ### 使用 VS Code 结合 Remote-SSH 插件简化流程 除了单独处理 SSH 设置外,还可以借助 Visual Studio Code 及其扩展包进一步优化体验。具体做法包括但不限于安装必要的组件、编辑对应的配置文档以及实际建立链接等环节[^2]。 1. 安装 **Remote - SSH** 插件; 2. 添加新的 SSH 主机信息; 3. 修改本地用户的 `~/.ssh/config` 文件加入类似下面这样的条目: ```plaintext Host myserver HostName your.server.ip.or.domain.name User remote_username IdentityFile ~/.ssh/id_rsa ``` 这样做的好处在于今后只需简单几步就能快速切换到关联好的实例上去开展工作而不必每次都重复输入繁琐的数据项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值