2009-03-08 70 views

Trả lời

45

phiên

Sessions được lưu trữ cho mỗi người dùng trong bộ nhớ (hoặc thay thế Session-State) trên máy chủ. Phiên sử dụng cookie (khóa phiên) để buộc người dùng tham gia phiên. Điều này có nghĩa là không có dữ liệu "nhạy cảm" nào được lưu trữ trong cookie trên máy người dùng.

Sessions thường được sử dụng để duy trì trạng thái khi bạn điều hướng thông qua trang web. Tuy nhiên, chúng cũng có thể được sử dụng để giữ các đối tượng thường được truy cập. Chỉ khi Trạng thái phiên được đặt thành InProc, nếu được đặt thành Session-State mode đối tượng khác cũng phải có thể tuần tự hóa.

Session["userName"] = "EvilBoy"; 

if(Session["userName"] != null) 
    lblUserName.Text = Session["userName"].ToString(); 

Cookies

Cookies được lưu trữ cho mỗi người dùng trên máy người dùng. Cookie thường chỉ là một chút thông tin. Cookie thường được sử dụng cho các cài đặt người dùng đơn giản, tùy chọn màu sắc vv. Không có thông tin nhạy cảm nào được lưu trữ trong cookie.

Bạn không bao giờ có thể tin tưởng hoàn toàn rằng cookie không bị người dùng hoặc nguồn bên ngoài giả mạo, tuy nhiên nếu bảo mật là mối quan tâm lớn và bạn phải sử dụng cookie thì bạn có thể mã hóa cookie hoặc đặt cookie để chỉ truyền qua SSL. Người dùng có thể xóa cookie của mình bất kỳ lúc nào hoặc không cho phép cookie hoàn toàn, do đó bạn không thể dựa vào chúng chỉ vì người dùng đã truy cập trang web của bạn trong quá khứ.

//add a username Cookie 
Response.Cookies["userName"].Value = "EvilBoy"; 
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(10); 
//Can Limit a cookie to a certain Domain 
Response.Cookies["domain"].Domain = "Stackoverflow.com"; 

//request a username cookie 
if(Request.Cookies["userName"] != null) 
    lblUserName.Text = Server.HtmlEncode(Request.Cookies["userName"].Value); 

sidenote

Điều đáng nói rằng ASP.NET cũng hỗ trợ cookieless nhà quản lý

+1

Ngoài ra, phiên được xác định theo từng yêu cầu của cookie. Nếu không có cookie (hoặc url idenitfier, xấu!) Thì phiên canot được theo dõi. – DGM

+0

Câu trả lời hay, nhưng tôi đã không upvote khi ông hỏi một câu hỏi chung, và câu trả lời của bạn đòi hỏi một số kiến ​​thức về các nền tảng của Microsoft. – TrojanName

+1

@Brian tuy nhiên ... câu hỏi được gắn thẻ C# và asp.net là công bằng :-) Các cookie và phiên là chủ đề chung hơn, nhưng mẫu được cung cấp phù hợp với OP nên tôi đã upvoted –

10

Cookie là một chuỗi identifaction lưu trữ bởi một máy chủ (người có tên miền) trong trình duyệt của người dùng truy cập vào máy chủ/miền.

Phiên là một đơn vị có thể biến, trạng thái, cài đặt trong khi một người dùng nhất định đang truy cập máy chủ/miền trong một khung thời gian cụ thể. Tất cả thông tin phiên trong mô hình truyền thống được lưu trữ trên máy chủ (!)

Vì nhiều người dùng đồng thời có thể truy cập vào máy chủ/miền cùng một lúc mà máy chủ cần phân biệt nhiều phiên đồng thời khác nhau và luôn gán phiên phải cho đúng người dùng. (Và không người dùng nào có thể "ăn cắp" phiên sử dụng của người khác)

Điều này được thực hiện thông qua cookie. Cookie được lưu trữ trong trình duyệt và trong trường hợp này phải là kết hợp ngẫu nhiên như s73jsd74df4fdf (vì vậy không thể đoán được) được gửi theo từng yêu cầu từ trình duyệt đến máy chủ và máy chủ có thể chỉ định và sử dụng phiên chính xác cho câu trả lời (số lượt xem trang)

Cookie cho phép máy chủ nhận ra trình duyệt/người dùng. Phiên cho phép máy chủ ghi nhớ thông tin giữa các lần xem trang khác nhau.

+1

Tôi upvoted này nhưng tại sao cộng đồng wiki? Nó là một câu trả lời liên quan đến lập trình hoàn toàn hợp lệ. –

5

Cookie là bộ nhớ lưu trữ các biến của khách hàng. Nó được lưu trữ trên máy khách bằng trình duyệt vật lý. Đó là phạm vi là máy rộng. Những người dùng khác nhau ở cùng một máy có thể đọc cùng một cookie.

Bởi vì điều này:

  1. Bạn không nên lưu trữ dữ liệu nhạy cảm trên cookie.
  2. Bạn không nên lưu trữ dữ liệu thuộc về một tài khoản người dùng.
  3. Cookie không ảnh hưởng đến tài nguyên máy chủ.
  4. Cookie hết hạn vào ngày được chỉ định bởi bạn.

Phiên là lưu trữ phía máy chủ của các biến của bạn. Mặc định, nó được lưu trữ trên bộ nhớ của máy chủ. Nhưng bạn có thể cấu hình nó để lưu trữ tại SqlServer. Phạm vi của nó là trình duyệt rộng. Cùng một người dùng có thể chạy hai hoặc nhiều trình duyệt và mỗi trình duyệt có phiên riêng của nó.

Bởi vì điều này:

  1. Bạn có thể lưu dữ liệu nhạy cảm trong phiên.
  2. Bạn không nên lưu mọi thứ trong phiên. đó là sự lãng phí tài nguyên máy chủ.
  3. Sau khi người dùng đóng trình duyệt, thời gian chờ của phiên xóa tất cả thông tin. (mặc định là 20 phút)
2

Có thể có cả hai: khóa cơ sở dữ liệu chính được băm và lưu trữ trong bảng tra cứu: sau đó băm được lưu trữ trên máy khách dưới dạng cookie. Khi cookie băm (hahhahaha :) được gửi, khóa chính tương ứng của nó được tra cứu, và phần còn lại của các chi tiết được liên kết với nó trong một bảng khác trên cơ sở dữ liệu máy chủ.

0
  • Sự khác biệt chính giữa cookie và phiên là cookie được lưu trữ trong trình duyệt của người dùng và phiên không được. Sự khác biệt này xác định những gì từng được sử dụng tốt nhất cho.

  • Cookie có thể lưu giữ thông tin trong trình duyệt của người dùng cho đến khi bị xóa. Nếu một người có tên đăng nhập và mật khẩu, điều này có thể được đặt làm cookie trong trình duyệt của họ để họ không phải đăng nhập lại vào trang web của bạn mỗi khi họ truy cập. Bạn có thể lưu trữ hầu hết mọi thứ trong cookie của trình duyệt.

+0

"Cookie được lưu trữ trong trình duyệt của người dùng và các phiên không được". Đối tượng sessionStorage toàn cầu có sẵn trên trang web như thế nào? –

0

Phiên không phụ thuộc vào người dùng cho phép cookie. Thay vào đó, chúng hoạt động giống như mã thông báo cho phép truy cập và truyền thông tin trong khi người dùng mở trình duyệt của họ. Vấn đề với phiên là khi bạn đóng trình duyệt, bạn cũng mất phiên. Vì vậy, nếu bạn có một trang web yêu cầu đăng nhập, điều này không thể được lưu dưới dạng phiên như nó có thể làm cookie và người dùng sẽ bị buộc phải đăng nhập lại mỗi khi họ truy cập.

1

Phiên là đối tượng phía máy chủ, chuyển hoặc truy cập dữ liệu giữa cuộc gọi trang.
Cookie là một đối tượng là máy khách/máy khách lưu trữ một số thông tin văn bản của trình duyệt và máy chủ.

0

Dường như có sự nhầm lẫn về cookie phiên là gì.

Thứ nhất, khi chúng ta đang nói về cookie phiên - nó không liên quan gì đến phiên ASP.Net. Tương tự như vậy, cookie phiên không có gì để làm với các quy trình phía máy chủ hoặc bộ nhớ đệm.

Cookie phiên không có gì khác ngoài cookie hết hạn khi phiên trình duyệt hết hạn. Để tạo cookie phiên - không đặt ngày hết hạn trên đó. Việc này lưu trữ cookie trong bộ nhớ và được xử lý khi trình duyệt được xử lý.

Các vấn đề liên quan