0%

我們在寫網站一定會使用到 Session
今天就跟大家分享自製微型 Asp.net Session

分析Session->實作Session->使用Session

在實作之前您必須先了解甚麼是Session
網路上一大堆介紹Session文章在此我就不多介紹
或可以點進之前小弟的介紹文來簡單了解 SessionID.cookie,Session傻傻分不清楚??

簡單說明:
Http協議是一個無狀態協議。

核心是 請求=>處理=>回應

每次請求都是獨立不會記住上一次做了甚麼
Session可以幫我們把資料存在Server記憶體,方便我們下次請求使用
上網連線眾多使用者,Server怎麼知道哪份資料,屬於哪個使用者的? 這就要依靠 SessonID
SessionID就像使用者的號碼牌,可以到Server拿相對應的資料

分析:

  1. 使用者請求頁面時會攜帶該網域下Cookies。
  2. Asp.net接收到並使用Key為SessionID的Cookie,使用Cookie的Value來SessionPool中查找屬於使用者的Session。
    如果是第一次請求或是沒有SessionID 會幫他產生一個新的並加入回應的Cookie中
  3. 取得Session物件後就可以在程式中使用。

分析如下圖:

Read more »

傳址,傳參考,傳址 是基本但重要的概念。此概念在很多語言都通用

我使用Gif動畫檔 快速帶領大家了解 傳址,傳參考,傳址

  1. 傳值(Call By Value)

    顧名思義 是把傳到 另一個記憶體位置

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627294_92268.gif

  1. 傳址 (Call By Adress)

是把記憶體位置傳到 另一個記憶體位置

補充:嚴格來說(Call By Adress)是不正統的說法,其實傳址也是傳值但傳的是記憶體位置

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627835_01874.gif

  1. 傳參考(Call By Reference)

    是把記憶體位置傳到 移到另一個記憶體位置上 (可看作同一個物件)

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627909_09266.gif

Read more »

Asp.net使用快取 (一)

向大家簡單介紹

  1. 快取是什麼
  2. 為何要使用快取
  3. 使用簡單HttpRuntime.Cache使用快取機制

這篇是分享把快取程式碼變得更有彈性


第二篇大綱

  1. 提出介面,提高可替換性
  2. 使用泛型改寫快取 讀取方式
  3. 使用擴充方法改寫快取

提出介面,提高可替換性

情境:

Read more »

最近回答SQL Server data caching in ASP.NET問題,且有人問我有關快取的問題.

所以小弟打算寫兩篇文章簡單分享我知道的快取


目錄:

第一篇

  1. 為何要使用快取
  2. 快取操作
  3. Asp.Net中使用快取 by HttpRuntime.Cache

第二篇

  1. 提出介面,提高可替換性
  2. 使用泛型改寫快取 讀取方式
  3. 使用擴充方法改寫快取

正文

Read more »

最近在 StackOverFlow 解答一個很有趣的問題Json.Net / Newtonsoft: Using JsonConvert.SerializeObject results in weird .Equals calls - why?

問題簡述是:

使用Newtonsoft.Json.JsonConvert.SerializeObject方法 來把物件轉成JSON資料時,為什麼會呼叫物件的Equals 方法 且傳入的object obj類型不是此類別類型,而是屬性的類型

以下是發問者提供的程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class JsonTestClass
{
public string Name { get; set; }
public List<int> MyIntList { get; set; }

public override bool Equals(object obj)
{
if (obj == null)
return false;
JsonTestClass jtc = (JsonTestClass)obj;
return true;
}
}

JsonTestClass c = new JsonTestClass();
c.Name = "test";
c.MyIntList = new List<int>();
c.MyIntList.Add(1);

string json = JsonConvert.SerializeObject(c, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });

問題解析:

看到問題後我就直接去看Json.net原始碼 一探到底原因出在哪邊.

後面發現當我們在呼叫JsonConvert.SerializeObject方法,會執行一個 private bool CheckForCircularReference私有方法.

1
2
3
bool exists = (Serializer._equalityComparer != null)
? _serializeStack.Contains(value, Serializer._equalityComparer)
: _serializeStack.Contains(value);
Read more »

最近在 StackOverFlow 解答一個很有趣的問題Json.Net / Newtonsoft: Using JsonConvert.SerializeObject results in weird .Equals calls - why?

問題簡述是:

使用Newtonsoft.Json.JsonConvert.SerializeObject方法 來把物件轉成JSON資料時,為什麼會呼叫物件的Equals 方法 且傳入的object obj類型不是此類別類型,而是屬性的類型

以下是發問者提供的程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class JsonTestClass
{
public string Name { get; set; }
public List<int> MyIntList { get; set; }

public override bool Equals(object obj)
{
if (obj == null)
return false;
JsonTestClass jtc = (JsonTestClass)obj;
return true;
}
}

JsonTestClass c = new JsonTestClass();
c.Name = "test";
c.MyIntList = new List<int>();
c.MyIntList.Add(1);

string json = JsonConvert.SerializeObject(c, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });

問題解析:

看到問題後我就直接去看Json.net原始碼 一探到底原因出在哪邊.

後面發現當我們在呼叫JsonConvert.SerializeObject方法,會執行一個 private bool CheckForCircularReference私有方法.

1
2
3
bool exists = (Serializer._equalityComparer != null)
? _serializeStack.Contains(value, Serializer._equalityComparer)
: _serializeStack.Contains(value);
Read more »

IOC是一個oop重要的程式設計思想。

學一個技術或思想前我們先了解,這個技術或思想為我們解決怎樣問題。

Ioc—Inversion of Control 控制反轉
控制反轉是一個設計思想 ,把對於某個物件的控制權移轉給第三方容器

簡單解釋

A物件程式內部需要使用B物件 A,B物件中有依賴的成份

控制反轉是把原本A對B控制權移交給第三方容器

降低A對B物件的耦合性,讓雙方都倚賴第三方容器。

  • 反轉概念如下圖

pic

我們可發現有兩點差異

Read more »

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用  Reflexil 搭配 ILSpy 或其他支援的反組譯軟體 

Reflexil 是一個組譯編輯器插件目前支援 Reflector, ILSpy 和 Telerik’s JustDecompile.

下載連結

Reflexil Release 2.2 搭配 ILSpy version 3.2 

前置動作,安裝

Reflexil 下載

下載 reflexil.for.ILSpy.2.2.bin.zip,不用下載AIO

Read more »

這一邊有三筆資料

  • U2FsdGVkX19FJsgVyam+Gh2EwmGs4BEJjJJsWxCXHWw84gp3uHvozWsHY8gfAx0C
  • VG9kYXkgaXMgYSBnb29kIERheQ==
  • 046a484a529ecfc7693753ee65802b5cfcafd548252d0e5f1bca845ad2208b91

這三個東西看起來都是亂碼,但所代表含意完全不一樣

這邊會跟大家分享這三個東西特性和差異性

此文同步發布 Blog [淺談] 編碼(encoding) vs 加解密 vs 雜湊(Hash)

前言:

會想分享這篇文章是因為蠻多人把

  • 編碼(encoding)
  • 加解密
  • 雜湊(Hash)

這三個東西搞混,尤其是把編碼當作加密….這是非常危險的事情.

編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
Read more »