Restored backward compatibility of pickling http.cookies.Morsel.  It was
broken after converting instance attributes to properies in issue #2211.
diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py
index f4e9035..98489fb 100644
--- a/Lib/http/cookies.py
+++ b/Lib/http/cookies.py
@@ -377,6 +377,18 @@
         self._value = val
         self._coded_value = coded_val
 
+    def __getstate__(self):
+        return {
+            'key': self._key,
+            'value': self._value,
+            'coded_value': self._coded_value,
+        }
+
+    def __setstate__(self, state):
+        self._key = state['key']
+        self._value = state['value']
+        self._coded_value = state['coded_value']
+
     def output(self, attrs=None, header="Set-Cookie:"):
         return "%s %s" % (header, self.OutputString(attrs))
 
diff --git a/Lib/test/test_http_cookies.py b/Lib/test/test_http_cookies.py
index 7665b15..5f1e74b 100644
--- a/Lib/test/test_http_cookies.py
+++ b/Lib/test/test_http_cookies.py
@@ -1,5 +1,6 @@
 # Simple test suite for http/cookies.py
 
+import copy
 from test.support import run_unittest, run_doctest, check_warnings
 import unittest
 from http import cookies
@@ -325,6 +326,11 @@
         self.assertIsNot(morsel_a, morsel_b)
         self.assertEqual(morsel_a, morsel_b)
 
+        morsel_b = copy.copy(morsel_a)
+        self.assertIsInstance(morsel_b, cookies.Morsel)
+        self.assertIsNot(morsel_a, morsel_b)
+        self.assertEqual(morsel_a, morsel_b)
+
     def test_setitem(self):
         morsel = cookies.Morsel()
         morsel['expires'] = 0
@@ -383,6 +389,20 @@
         self.assertRaises(TypeError, morsel.update)
         self.assertRaises(TypeError, morsel.update, 0)
 
+    def test_pickle(self):
+        morsel_a = cookies.Morsel()
+        morsel_a.set('foo', 'bar', 'baz')
+        morsel_a.update({
+            'version': 2,
+            'comment': 'foo',
+        })
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            with self.subTest(proto=proto):
+                morsel_b = pickle.loads(pickle.dumps(morsel_a, proto))
+                self.assertIsInstance(morsel_b, cookies.Morsel)
+                self.assertEqual(morsel_b, morsel_a)
+                self.assertEqual(str(morsel_b), str(morsel_a))
+
     def test_repr(self):
         morsel = cookies.Morsel()
         self.assertEqual(repr(morsel), '<Morsel: None=None>')