## Session
在客戶端,`Session`提供了一個全局對象,可以用它來保存任意的鍵值對。例如:保存列表中當前選中項。
`Session`的特殊之處在于,它是_響應式_的。如果在[template helper](#template_helpers)或[`Tracker.autorun`](#tracker_autorun)里調用了 `Session.get("myKey")`,那么無論何時調用`Session.set("myKey", newValue)` 都會觸發相應的模板片段自動重新渲染。
### [Session.set(key, value)](#/basic/Session-set)
Client
將session里鍵key的值設為value。并通知所有監聽器:鍵key的值發生了變化(例如:通知那些調用[`Session.get`](#session_get)獲取鍵`key`值的模板helper或是autorun,重新渲染模板或是重新執行[`Tracker.autorun`](#tracker_autorun))。
#### Arguments
key String
The key to set, eg, `selectedItem`
value [EJSON-able Object](#ejson) or undefined
The new value for `key`
### [Session.get(key)](#/basic/Session-get)
Client
獲取session里鍵key的值。如果是在一個_[響應式計算(reactive computation)](#reactivity)_內部。當通過[`Session.set`](#session_set)修改鍵key的值時,會作廢對應的計算。這個方法會返回鍵key值的克隆副本,所以如果鍵key的值是一個對象或數組,修改返回值并不會改變session里鍵key的值。
#### Arguments
key String
The name of the session variable to return
例如:
```
<!-- In your template -->
<template name="main">
<p>We've always been at war with {{theEnemy}}.</p>
</template>
```
```
// In your JavaScript
Template.main.helpers({
theEnemy: function () {
return Session.get("enemy");
}
});
Session.set("enemy", "Eastasia");
// Page will say "We've always been at war with Eastasia"
Session.set("enemy", "Eurasia");
// Page will change to say "We've always been at war with Eurasia"
```
`Seesion`帶我們初次體會到了_響應式_的魅力,視圖會在必要時自動更新,無需手動調用`render`函數。 在下一節,將會學習如何使用Tracker,一個非常輕量的庫,使響應式成為可能。