[{"data":1,"prerenderedAt":1037},["ShallowReactive",2],{"navigation":3,"-examples-handle-session":184,"-examples-handle-session-surround":1032},[4,91,133,161,168],{"title":5,"path":6,"stem":7,"children":8,"icon":90},"Guide","/guide","1.guide/0.index",[9,12,53,69],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":52},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42,47],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",{"title":48,"path":49,"stem":50,"icon":51},"Nested Apps","/guide/basics/nested-apps","1.guide/1.basics/7.nested-apps","material-symbols-light:layers-outline",false,{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":52},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[59,64],{"title":60,"path":61,"stem":62,"icon":63},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":65,"path":66,"stem":67,"icon":68},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":70,"icon":71,"path":72,"stem":73,"children":74,"page":52},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":81,"path":82,"stem":83,"icon":84},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":86,"path":87,"stem":88,"icon":89},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":92,"path":93,"stem":94,"children":95,"icon":97},"Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128],{"title":92,"path":93,"stem":94,"icon":97},"ph:function-bold",{"title":99,"path":100,"stem":101,"icon":102},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":104,"path":105,"stem":106,"icon":107},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":109,"path":110,"stem":111,"icon":112},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":114,"path":115,"stem":116,"icon":117},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":119,"path":120,"stem":121,"icon":122},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":124,"path":125,"stem":126,"icon":127},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":129,"path":130,"stem":131,"icon":132},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":134,"path":135,"stem":136,"children":137,"icon":139},"Examples","/examples","4.examples/0.index",[138,140,145,149,153,157],{"title":134,"path":135,"stem":136,"icon":139},"ph:code",{"title":141,"path":142,"stem":143,"icon":144},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":146,"path":147,"stem":148,"icon":144},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":150,"path":151,"stem":152,"icon":144},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":154,"path":155,"stem":156,"icon":144},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":158,"path":159,"stem":160,"icon":144},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":162,"path":163,"stem":164,"children":165,"icon":167},"Migration","/migration","5.migration/0.index",[166],{"title":162,"path":163,"stem":164,"icon":167},"icons8:up-round",{"title":169,"path":170,"stem":171,"children":172},"Blog","/blog","99.blog",[173,176,180],{"title":169,"path":170,"stem":174,"icon":175},"99.blog/index","i-lucide-file-text",{"title":177,"path":178,"stem":179,"icon":175},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":181,"path":182,"stem":183,"icon":175},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":185,"title":146,"body":186,"description":1026,"extension":1027,"meta":1028,"navigation":1029,"path":147,"seo":1030,"stem":148,"__hash__":1031},"content/4.examples/handle-session.md",{"type":187,"value":188,"toc":1019,"icon":144},"minimark",[189,193,196,225,231,236,248,377,383,394,404,410,414,423,506,513,517,525,699,702,708,711,720,724,732,838,846,850,856,1015],[190,191,192],"p",{},"A session is a way to remember users using cookies. It is a very common method for authenticating users or saving data about them, such as their language or preferences on the web.",[190,194,195],{},"H3 provides many utilities to handle sessions:",[197,198,199,207,213,219],"ul",{},[200,201,202,206],"li",{},[203,204,205],"code",{},"useSession"," initializes a session and returns a wrapper to control it.",[200,208,209,212],{},[203,210,211],{},"getSession"," initializes or retrieves the current user session.",[200,214,215,218],{},[203,216,217],{},"updateSession"," updates the data of the current session.",[200,220,221,224],{},[203,222,223],{},"clearSession"," clears the current session.",[190,226,227,228,230],{},"Most of the time, you will use ",[203,229,205],{}," to manipulate the session.",[232,233,235],"h2",{"id":234},"initialize-a-session","Initialize a Session",[190,237,238,239,241,242,247],{},"To initialize a session, you need to use ",[203,240,205],{}," in an ",[243,244,246],"a",{"href":245},"/guide/handler","event handler",":",[249,250,255],"pre",{"className":251,"code":252,"language":253,"meta":254,"style":254},"language-js shiki shiki-themes github-light github-dark github-dark","import { useSession } from \"h3\";\n\napp.use(async (event) => {\n  const session = await useSession(event, {\n    password: \"80d42cfb-1cd2-462c-8f17-e3237d9027e9\",\n  });\n\n  // do something...\n});\n","js","",[203,256,257,280,287,319,341,353,359,364,371],{"__ignoreMap":254},[258,259,262,266,270,273,277],"span",{"class":260,"line":261},"line",1,[258,263,265],{"class":264},"so5gQ","import",[258,267,269],{"class":268},"slsVL"," { useSession } ",[258,271,272],{"class":264},"from",[258,274,276],{"class":275},"sfrk1"," \"h3\"",[258,278,279],{"class":268},";\n",[258,281,283],{"class":260,"line":282},2,[258,284,286],{"emptyLinePlaceholder":285},true,"\n",[258,288,290,293,297,300,303,306,310,313,316],{"class":260,"line":289},3,[258,291,292],{"class":268},"app.",[258,294,296],{"class":295},"shcOC","use",[258,298,299],{"class":268},"(",[258,301,302],{"class":264},"async",[258,304,305],{"class":268}," (",[258,307,309],{"class":308},"sQHwn","event",[258,311,312],{"class":268},") ",[258,314,315],{"class":264},"=>",[258,317,318],{"class":268}," {\n",[258,320,322,325,329,332,335,338],{"class":260,"line":321},4,[258,323,324],{"class":264},"  const",[258,326,328],{"class":327},"suiK_"," session",[258,330,331],{"class":264}," =",[258,333,334],{"class":264}," await",[258,336,337],{"class":295}," useSession",[258,339,340],{"class":268},"(event, {\n",[258,342,344,347,350],{"class":260,"line":343},5,[258,345,346],{"class":268},"    password: ",[258,348,349],{"class":275},"\"80d42cfb-1cd2-462c-8f17-e3237d9027e9\"",[258,351,352],{"class":268},",\n",[258,354,356],{"class":260,"line":355},6,[258,357,358],{"class":268},"  });\n",[258,360,362],{"class":260,"line":361},7,[258,363,286],{"emptyLinePlaceholder":285},[258,365,367],{"class":260,"line":366},8,[258,368,370],{"class":369},"sCsY4","  // do something...\n",[258,372,374],{"class":260,"line":373},9,[258,375,376],{"class":268},"});\n",[378,379,380],"warning",{},[190,381,382],{},"\nYou must provide a password to encrypt the session.",[190,384,385,386,389,390,393],{},"This will initialize a session and return an header ",[203,387,388],{},"Set-Cookie"," with a cookie named ",[203,391,392],{},"h3"," and an encrypted content.",[190,395,396,397,399,400,403],{},"If the request contains a cookie named ",[203,398,392],{}," or a header named ",[203,401,402],{},"x-h3-session",", the session will be initialized with the content of the cookie or the header.",[405,406,407],"note",{},[190,408,409],{},"\nThe header take precedence over the cookie.",[232,411,413],{"id":412},"get-data-from-a-session","Get Data from a Session",[190,415,416,417,419,420,422],{},"To get data from a session, we will still use ",[203,418,205],{},". Under the hood, it will use ",[203,421,211],{}," to get the session.",[249,424,426],{"className":251,"code":425,"language":253,"meta":254,"style":254},"import { useSession } from \"h3\";\n\napp.use(async (event) => {\n  const session = await useSession(event, {\n    password: \"80d42cfb-1cd2-462c-8f17-e3237d9027e9\",\n  });\n\n  return session.data;\n});\n",[203,427,428,440,444,464,478,486,490,494,502],{"__ignoreMap":254},[258,429,430,432,434,436,438],{"class":260,"line":261},[258,431,265],{"class":264},[258,433,269],{"class":268},[258,435,272],{"class":264},[258,437,276],{"class":275},[258,439,279],{"class":268},[258,441,442],{"class":260,"line":282},[258,443,286],{"emptyLinePlaceholder":285},[258,445,446,448,450,452,454,456,458,460,462],{"class":260,"line":289},[258,447,292],{"class":268},[258,449,296],{"class":295},[258,451,299],{"class":268},[258,453,302],{"class":264},[258,455,305],{"class":268},[258,457,309],{"class":308},[258,459,312],{"class":268},[258,461,315],{"class":264},[258,463,318],{"class":268},[258,465,466,468,470,472,474,476],{"class":260,"line":321},[258,467,324],{"class":264},[258,469,328],{"class":327},[258,471,331],{"class":264},[258,473,334],{"class":264},[258,475,337],{"class":295},[258,477,340],{"class":268},[258,479,480,482,484],{"class":260,"line":343},[258,481,346],{"class":268},[258,483,349],{"class":275},[258,485,352],{"class":268},[258,487,488],{"class":260,"line":355},[258,489,358],{"class":268},[258,491,492],{"class":260,"line":361},[258,493,286],{"emptyLinePlaceholder":285},[258,495,496,499],{"class":260,"line":366},[258,497,498],{"class":264},"  return",[258,500,501],{"class":268}," session.data;\n",[258,503,504],{"class":260,"line":373},[258,505,376],{"class":268},[190,507,508,509,512],{},"Data are stored in the ",[203,510,511],{},"data"," property of the session. If there is no data, it will be an empty object.",[232,514,516],{"id":515},"add-data-to-a-session","Add Data to a Session",[190,518,519,520,419,522,524],{},"To add data to a session, we will still use ",[203,521,205],{},[203,523,217],{}," to update the session.",[249,526,528],{"className":251,"code":527,"language":253,"meta":254,"style":254},"import { useSession } from \"h3\";\n\napp.use(async (event) => {\n  const session = await useSession(event, {\n    password: \"80d42cfb-1cd2-462c-8f17-e3237d9027e9\",\n  });\n\n  const count = (session.data.count || 0) + 1;\n  await session.update({\n    count: count,\n  });\n\n  return count === 0\n    ? \"Hello world!\"\n    : `Hello world! You have visited this page ${count} times.`;\n});\n",[203,529,530,542,546,566,580,588,592,596,624,638,644,649,654,668,677,694],{"__ignoreMap":254},[258,531,532,534,536,538,540],{"class":260,"line":261},[258,533,265],{"class":264},[258,535,269],{"class":268},[258,537,272],{"class":264},[258,539,276],{"class":275},[258,541,279],{"class":268},[258,543,544],{"class":260,"line":282},[258,545,286],{"emptyLinePlaceholder":285},[258,547,548,550,552,554,556,558,560,562,564],{"class":260,"line":289},[258,549,292],{"class":268},[258,551,296],{"class":295},[258,553,299],{"class":268},[258,555,302],{"class":264},[258,557,305],{"class":268},[258,559,309],{"class":308},[258,561,312],{"class":268},[258,563,315],{"class":264},[258,565,318],{"class":268},[258,567,568,570,572,574,576,578],{"class":260,"line":321},[258,569,324],{"class":264},[258,571,328],{"class":327},[258,573,331],{"class":264},[258,575,334],{"class":264},[258,577,337],{"class":295},[258,579,340],{"class":268},[258,581,582,584,586],{"class":260,"line":343},[258,583,346],{"class":268},[258,585,349],{"class":275},[258,587,352],{"class":268},[258,589,590],{"class":260,"line":355},[258,591,358],{"class":268},[258,593,594],{"class":260,"line":361},[258,595,286],{"emptyLinePlaceholder":285},[258,597,598,600,603,605,608,611,614,616,619,622],{"class":260,"line":366},[258,599,324],{"class":264},[258,601,602],{"class":327}," count",[258,604,331],{"class":264},[258,606,607],{"class":268}," (session.data.count ",[258,609,610],{"class":264},"||",[258,612,613],{"class":327}," 0",[258,615,312],{"class":268},[258,617,618],{"class":264},"+",[258,620,621],{"class":327}," 1",[258,623,279],{"class":268},[258,625,626,629,632,635],{"class":260,"line":373},[258,627,628],{"class":264},"  await",[258,630,631],{"class":268}," session.",[258,633,634],{"class":295},"update",[258,636,637],{"class":268},"({\n",[258,639,641],{"class":260,"line":640},10,[258,642,643],{"class":268},"    count: count,\n",[258,645,647],{"class":260,"line":646},11,[258,648,358],{"class":268},[258,650,652],{"class":260,"line":651},12,[258,653,286],{"emptyLinePlaceholder":285},[258,655,657,659,662,665],{"class":260,"line":656},13,[258,658,498],{"class":264},[258,660,661],{"class":268}," count ",[258,663,664],{"class":264},"===",[258,666,667],{"class":327}," 0\n",[258,669,671,674],{"class":260,"line":670},14,[258,672,673],{"class":264},"    ?",[258,675,676],{"class":275}," \"Hello world!\"\n",[258,678,680,683,686,689,692],{"class":260,"line":679},15,[258,681,682],{"class":264},"    :",[258,684,685],{"class":275}," `Hello world! You have visited this page ${",[258,687,688],{"class":268},"count",[258,690,691],{"class":275},"} times.`",[258,693,279],{"class":268},[258,695,697],{"class":260,"line":696},16,[258,698,376],{"class":268},[190,700,701],{},"What is happening here?",[190,703,704,705,707],{},"We try to get a session from the request. If there is no session, a new one will be created. Then, we increment the ",[203,706,688],{}," property of the session and we update the session with the new value. Finally, we return a message with the number of times the user visited the page.",[190,709,710],{},"Try to visit the page multiple times and you will see the number of times you visited the page.",[405,712,713],{},[190,714,715,716,719],{},"\nIf you use a CLI tool like ",[203,717,718],{},"curl"," to test this example, you will not see the number of times you visited the page because the CLI tool does not save cookies. You must get the cookie from the response and send it back to the server.",[232,721,723],{"id":722},"clear-a-session","Clear a Session",[190,725,726,727,419,729,731],{},"To clear a session, we will still use ",[203,728,205],{},[203,730,223],{}," to clear the session.",[249,733,735],{"className":251,"code":734,"language":253,"meta":254,"style":254},"import { useSession } from \"h3\";\n\napp.use(\"/clear\", async (event) => {\n  const session = await useSession(event, {\n    password: \"80d42cfb-1cd2-462c-8f17-e3237d9027e9\",\n  });\n\n  await session.clear();\n\n  return \"Session cleared\";\n});\n",[203,736,737,749,753,779,793,801,805,809,821,825,834],{"__ignoreMap":254},[258,738,739,741,743,745,747],{"class":260,"line":261},[258,740,265],{"class":264},[258,742,269],{"class":268},[258,744,272],{"class":264},[258,746,276],{"class":275},[258,748,279],{"class":268},[258,750,751],{"class":260,"line":282},[258,752,286],{"emptyLinePlaceholder":285},[258,754,755,757,759,761,764,767,769,771,773,775,777],{"class":260,"line":289},[258,756,292],{"class":268},[258,758,296],{"class":295},[258,760,299],{"class":268},[258,762,763],{"class":275},"\"/clear\"",[258,765,766],{"class":268},", ",[258,768,302],{"class":264},[258,770,305],{"class":268},[258,772,309],{"class":308},[258,774,312],{"class":268},[258,776,315],{"class":264},[258,778,318],{"class":268},[258,780,781,783,785,787,789,791],{"class":260,"line":321},[258,782,324],{"class":264},[258,784,328],{"class":327},[258,786,331],{"class":264},[258,788,334],{"class":264},[258,790,337],{"class":295},[258,792,340],{"class":268},[258,794,795,797,799],{"class":260,"line":343},[258,796,346],{"class":268},[258,798,349],{"class":275},[258,800,352],{"class":268},[258,802,803],{"class":260,"line":355},[258,804,358],{"class":268},[258,806,807],{"class":260,"line":361},[258,808,286],{"emptyLinePlaceholder":285},[258,810,811,813,815,818],{"class":260,"line":366},[258,812,628],{"class":264},[258,814,631],{"class":268},[258,816,817],{"class":295},"clear",[258,819,820],{"class":268},"();\n",[258,822,823],{"class":260,"line":373},[258,824,286],{"emptyLinePlaceholder":285},[258,826,827,829,832],{"class":260,"line":640},[258,828,498],{"class":264},[258,830,831],{"class":275}," \"Session cleared\"",[258,833,279],{"class":268},[258,835,836],{"class":260,"line":646},[258,837,376],{"class":268},[190,839,840,841,843,844,731],{},"H3 will send a header ",[203,842,388],{}," with an empty cookie named ",[203,845,392],{},[232,847,849],{"id":848},"options","Options",[190,851,852,853,855],{},"When to use ",[203,854,205],{},", you can pass an object with options as the second argument to configure the session:",[249,857,859],{"className":251,"code":858,"language":253,"meta":254,"style":254},"import { useSession } from \"h3\";\n\napp.use(async (event) => {\n  const session = await useSession(event, {\n    name: \"my-session\",\n    password: \"80d42cfb-1cd2-462c-8f17-e3237d9027e9\",\n    cookie: {\n      httpOnly: true,\n      secure: true,\n      sameSite: \"strict\",\n    },\n    maxAge: 60 * 60 * 24 * 7, // 7 days\n  });\n\n  return session.data;\n});\n",[203,860,861,873,877,897,911,921,929,934,944,953,963,968,997,1001,1005,1011],{"__ignoreMap":254},[258,862,863,865,867,869,871],{"class":260,"line":261},[258,864,265],{"class":264},[258,866,269],{"class":268},[258,868,272],{"class":264},[258,870,276],{"class":275},[258,872,279],{"class":268},[258,874,875],{"class":260,"line":282},[258,876,286],{"emptyLinePlaceholder":285},[258,878,879,881,883,885,887,889,891,893,895],{"class":260,"line":289},[258,880,292],{"class":268},[258,882,296],{"class":295},[258,884,299],{"class":268},[258,886,302],{"class":264},[258,888,305],{"class":268},[258,890,309],{"class":308},[258,892,312],{"class":268},[258,894,315],{"class":264},[258,896,318],{"class":268},[258,898,899,901,903,905,907,909],{"class":260,"line":321},[258,900,324],{"class":264},[258,902,328],{"class":327},[258,904,331],{"class":264},[258,906,334],{"class":264},[258,908,337],{"class":295},[258,910,340],{"class":268},[258,912,913,916,919],{"class":260,"line":343},[258,914,915],{"class":268},"    name: ",[258,917,918],{"class":275},"\"my-session\"",[258,920,352],{"class":268},[258,922,923,925,927],{"class":260,"line":355},[258,924,346],{"class":268},[258,926,349],{"class":275},[258,928,352],{"class":268},[258,930,931],{"class":260,"line":361},[258,932,933],{"class":268},"    cookie: {\n",[258,935,936,939,942],{"class":260,"line":366},[258,937,938],{"class":268},"      httpOnly: ",[258,940,941],{"class":327},"true",[258,943,352],{"class":268},[258,945,946,949,951],{"class":260,"line":373},[258,947,948],{"class":268},"      secure: ",[258,950,941],{"class":327},[258,952,352],{"class":268},[258,954,955,958,961],{"class":260,"line":640},[258,956,957],{"class":268},"      sameSite: ",[258,959,960],{"class":275},"\"strict\"",[258,962,352],{"class":268},[258,964,965],{"class":260,"line":646},[258,966,967],{"class":268},"    },\n",[258,969,970,973,976,979,982,984,987,989,992,994],{"class":260,"line":651},[258,971,972],{"class":268},"    maxAge: ",[258,974,975],{"class":327},"60",[258,977,978],{"class":264}," *",[258,980,981],{"class":327}," 60",[258,983,978],{"class":264},[258,985,986],{"class":327}," 24",[258,988,978],{"class":264},[258,990,991],{"class":327}," 7",[258,993,766],{"class":268},[258,995,996],{"class":369},"// 7 days\n",[258,998,999],{"class":260,"line":656},[258,1000,358],{"class":268},[258,1002,1003],{"class":260,"line":670},[258,1004,286],{"emptyLinePlaceholder":285},[258,1006,1007,1009],{"class":260,"line":679},[258,1008,498],{"class":264},[258,1010,501],{"class":268},[258,1012,1013],{"class":260,"line":696},[258,1014,376],{"class":268},[1016,1017,1018],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":254,"searchDepth":282,"depth":282,"links":1020},[1021,1022,1023,1024,1025],{"id":234,"depth":282,"text":235},{"id":412,"depth":282,"text":413},{"id":515,"depth":282,"text":516},{"id":722,"depth":282,"text":723},{"id":848,"depth":282,"text":849},"Remember your users using a session.","md",{"icon":144},{"icon":144},{"title":146,"description":1026},"s7oxBSMkPf4y88mHSNgECyYl-Iug7FJt4NRQFW6GLxE",[1033,1035],{"title":141,"path":142,"stem":143,"description":1034,"icon":144,"children":-1},"Use cookies to store data on the client.",{"title":150,"path":151,"stem":152,"description":1036,"icon":144,"children":-1},"Serve static assets such as HTML, images, CSS, JavaScript, etc.",1768646387390]