diff --git a/wp-comments-post.php b/wp-comments-post.php
index 39bc5a8..46e7b3b 100644
--- a/wp-comments-post.php
+++ b/wp-comments-post.php
@@ -38,16 +38,18 @@ if ( is_wp_error( $comment ) ) {
 }
 
 $user = wp_get_current_user();
+$cookie_consent = ( isset( $_POST['cookies'] ) ) ? true : false;
 
 /**
  * Perform other actions when comment cookies are set.
  *
  * @since 3.4.0
  *
- * @param WP_Comment $comment Comment object.
- * @param WP_User    $user    User object. The user may not exist.
+ * @param WP_Comment $comment        Comment object.
+ * @param WP_User    $user           User object. The user may not exist.
+ * @param string     $cookie_consent The 'cookies' parmater sent via $_POST.
  */
-do_action( 'set_comment_cookies', $comment, $user );
+do_action( 'set_comment_cookies', $comment, $user, $cookie_consent );
 
 $location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;
 
diff --git a/wp-includes/comment-template.php b/wp-includes/comment-template.php
index 5795362..7666164 100644
--- a/wp-includes/comment-template.php
+++ b/wp-includes/comment-template.php
@@ -2267,6 +2267,8 @@ function comment_form( $args = array(), $post_id = null ) {
 					'<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' /></p>',
 		'url'    => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' .
 					'<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>',
+		'cookies' => '<p class="comment-form-cookies"><input id="cookies" name="cookies" type="checkbox" checked="checked" />' .
+					'<label for="cookies">' . __('Save my name, email, and site URL in my browser for next time I post a comment.') . '</label></p>',
 	);
 
 	$required_text = sprintf( ' ' . __( 'Required fields are marked %s' ), '<span class="required">*</span>' );
diff --git a/wp-includes/comment.php b/wp-includes/comment.php
index 0d35f09..a709496 100644
--- a/wp-includes/comment.php
+++ b/wp-includes/comment.php
@@ -542,11 +542,13 @@ function wp_queue_comments_for_comment_meta_lazyload( $comments ) {
  *
  * @param WP_Comment $comment Comment object.
  * @param object     $user    Comment author's object.
+ * @param boolean    $cookie_consent Comment author's permission to store cookies.
  *
  * @since 3.4.0
  */
-function wp_set_comment_cookies( $comment, $user ) {
-	if ( $user->exists() ) {
+function wp_set_comment_cookies( $comment, $user, $cookie_consent ) {
+	// If the user already exists, or the user opted out of cookies, don't set cookies.
+	if ( $user->exists() || ( false == $cookie_consent ) ) {
 		return;
 	}
 
diff --git a/wp-includes/default-filters.php b/wp-includes/default-filters.php
index 6b60625..090adfe 100644
--- a/wp-includes/default-filters.php
+++ b/wp-includes/default-filters.php
@@ -327,7 +327,7 @@ add_action( 'do_feed_rss2', 'do_feed_rss2', 10, 1 );
 add_action( 'do_feed_atom', 'do_feed_atom', 10, 1 );
 add_action( 'do_pings', 'do_all_pings', 10, 1 );
 add_action( 'do_robots', 'do_robots' );
-add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 2 );
+add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3 );
 add_action( 'sanitize_comment_cookies', 'sanitize_comment_cookies' );
 add_action( 'admin_print_scripts', 'print_emoji_detection_script' );
 add_action( 'admin_print_scripts', 'print_head_scripts', 20 );
