diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 98465bf1..6172d58e 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -14,11 +14,8 @@
-
-
-
@@ -33,11 +30,9 @@
-
-
-
-
-
+
+
+
@@ -45,11 +40,9 @@
-
-
-
-
-
+
+
+
@@ -67,10 +60,10 @@
-
+
-
+
@@ -79,10 +72,10 @@
-
+
-
+
@@ -91,11 +84,9 @@
-
-
-
-
-
+
+
+
@@ -103,8 +94,8 @@
-
-
+
+
@@ -113,11 +104,11 @@
-
-
+
+
-
-
+
+
@@ -126,8 +117,8 @@
-
-
+
+
@@ -153,8 +144,8 @@
-
+
@@ -240,6 +231,7 @@
1525656717913
+
1525657080582
@@ -252,23 +244,23 @@
-
+
-
+
-
+
-
-
+
+
-
+
+
-
@@ -297,21 +289,96 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
@@ -328,7 +395,7 @@
-
+
@@ -338,8 +405,8 @@
-
-
+
+
@@ -357,7 +424,7 @@
-
+
@@ -367,7 +434,6 @@
-
@@ -396,86 +462,73 @@
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
diff --git a/main.cpp b/main.cpp
index 2c9697e1..55f477fc 100644
--- a/main.cpp
+++ b/main.cpp
@@ -58,7 +58,7 @@ int main() {
server.set_http_handler("/login",[](const request& req, response& res) {
auto session = res.start_session();
session->set_data("userid",std::string("1"));
- session->set_max_age(10);
+ session->set_max_age(-1);
res.set_status_and_content(status_type::ok, "login");
});
@@ -69,7 +69,6 @@ int main() {
res.set_status_and_content(status_type::ok, "没有登录", res_content_type::string);
return;
}
-
res.set_status_and_content(status_type::ok, "已经登录",res_content_type::string);
});
diff --git a/response.hpp b/response.hpp
index 8f1b0ed6..224c87ce 100644
--- a/response.hpp
+++ b/response.hpp
@@ -26,10 +26,11 @@ namespace cinatra {
std::vector to_buffers() {
std::vector buffers;
add_header("Host", "cinatra");
- if(session_ != nullptr)
+ if(session_ != nullptr && session_->is_need_update())
{
auto cookie_str = session_->get_cookie().to_string();
add_header("Set-Cookie",cookie_str.c_str());
+ session_->set_need_update(false);
}
buffers.reserve(headers_.size() * 4 + 5);
buffers.emplace_back(to_buffer(status_));
diff --git a/session.hpp b/session.hpp
index 9df54d26..a5231ef1 100644
--- a/session.hpp
+++ b/session.hpp
@@ -64,6 +64,7 @@ namespace cinatra {
void set_max_age(const std::time_t seconds)
{
std::unique_lock lock(mtx_);
+ is_update_ = true;
expire_ = seconds == -1 ? 600 : seconds;
std::time_t now = std::time(nullptr);
time_stamp_ = now + expire_;
@@ -79,6 +80,18 @@ namespace cinatra {
return time_stamp_;
}
+ bool is_need_update()
+ {
+ std::unique_lock lock(mtx_);
+ return is_update_;
+ }
+
+ void set_need_update(bool flag)
+ {
+ std::unique_lock lock(mtx_);
+ is_update_ = flag;
+ }
+
private:
session() = delete;
@@ -88,5 +101,6 @@ namespace cinatra {
std::map data_;
std::mutex mtx_;
cookie cookie_;
+ bool is_update_ = true;
};
}
\ No newline at end of file